python - 如何解压文件并访问其中的所有文件夹和子文件夹并创建数据框?

标签 python r database tar

我有一个电子邮件数据集。数据集本身为 2 GB,下载为 tar.gz 文件。当我在我的系统上提取它时,我得到一个名为“maildr”的文件夹。

当我进入“maildr”文件夹时,我有一个文件夹列表,每个文件夹代表一个用户。当我单击代表用户的文件夹时,我会看到更多子文件夹,例如“收件箱”、“已发送邮件”、“已删除邮件”等。

现在当我点击“收件箱”时,我有一组包含实际电子邮件的文本文件。问题是如何遍历文件夹和子文件夹并访问电子邮件并创建相关数据框。

好消息是我找到了一个类似的解决方案,但它是在 R 中,我发现在 python 中做同样的事情很困难。

if (!file.exists("enron_mail_20150507.tgz")) {
    untar("enron_mail_20150507.tgz")
}

emails <- list.files("maildir/", full.names = TRUE, recursive = 
TRUE)
emails <- emails[grep("/inbox", emails)]

最佳答案

我建议您为第一个文件夹创建一个数据框。 然后您应该将所有数据框附加到第一个文件夹。

要为一个文件夹创建一个数据框,例如在邮箱文件夹中,请执行以下操作:

# Put in your mailbox path of the current user where the text files are saved
mypath = "home/archid/..../mailbox"
setwd(mypath)

# Create list of text files
txt_files_ls = list.files(path=mypath, pattern="*.txt") 
# Read the files in, assuming comma separator
txt_files_df <- lapply(txt_files_ls, function(x) {read.table(file = x, header = T, sep =",")})
# Combine them
combined_df <- do.call("rbind", lapply(txt_files_df, as.data.frame)) 

然后您需要读取所有文件夹并附加到第一个数据框。您将需要一个 for 循环和追加命令:pandas.DataFrame.append。

另一种方法是制作一个 bash 脚本来读取每个文件夹,并为每个文件夹创建一个 *.csv 文件。然后您将合并所有 csv 文件。检查 csv 写入文件命令。

关于python - 如何解压文件并访问其中的所有文件夹和子文件夹并创建数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449541/

相关文章:

python - 断言错误 : yield from wasn't used with future

r - R:index()无法返回所需的类

r - 在 dplyr 的 mutate 中应用过滤器时保持 group_by 完好无损

sql-server - 过程插入语句中的不同类型的参数

sql - 配置单元查询 : Matching column Values from Array of string to make Flags

php - 远程访问EC2上的mysql

python - Pandas .min() 方法似乎不是最快的

python - 如果网络服务器返回错误,但仅在上传大文件时,请求库会引发 ConnectionError

python - Tensorflow:下载并运行预训练的 VGG 或 ResNet 模型

r - 使用Rstudio安装R包时出错