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

时间:2019-08-11 11:21:02

标签: 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)]

1 个答案:

答案 0 :(得分:0)

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

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

# 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写入文件命令。

相关问题