Python将txt文件读入数据框

OAK*_*OAK 2 python pandas

我试图将txt文件(整个目录)提取到pandas数据框中,以使数据框中的每一行都包含一个文件的内容。

据我所知,文本文件没有分隔符,它们是电子邮件的正文。除一个文件外,所有文件均分为多行。因此,我有超过500行,而不是有20行(每个文件一个)。我不知道一个文件与其他文件有何不同。它们都是纯文本。

我使用的代码是:

import pandas as pd 

for i in files:
    list_.append(pd.read_csv('//directory'+i ,sep="\t" , quoting=csv.QUOTE_NONE,header=None,names=["message", "label"]))
Run Code Online (Sandbox Code Playgroud)

我将分隔符设置为表格格式,因为我认为它根本不会影响文本的提取。任何想法在这里是什么问题?

pau*_*l-g 5

您正在将电子邮件作为CSV文件阅读,因此文件内容为:

  1. 在每个制表符分隔符处拆分以创建一列;无论选择哪种分隔符,我都认为这将是一个错误的选择,因为任何字符都可能出现在电子邮件正文中;

  2. 电子邮件中的每个换行符都会创建一个新行(可能解释了您的500行)

由于电子邮件不是CSV文件,为什么不编写自己的函数以将每个文件分别读取为一个字符串,然后从所有这些字符串中创建一个数据框架。例如,以字符串形式读取当前目录中的所有文件:

data = []
path = '.'
files = [f for f in os.listdir(path) if os.path.isfile(f)]
for f in files:
  with open (f, "r") as myfile:
    data.append(myfile.read())

df = pd.DataFrame(data)
Run Code Online (Sandbox Code Playgroud)

下面是一个这样的例子在行动,因为它是:

$ ls .
test1.txt  test2.txt  load_files.py

$ cat load_files.py 

import pandas as pd
import os

data = []
path = '.'
files = [f for f in os.listdir(path) if os.path.isfile(f)]
for f in files:
  with open (f, "r") as myfile:
    data.append(myfile.read())

df = pd.DataFrame(data)
print df


$ cat test1.txt 
asdasd
ada
adasd

$ cat test2.txt 
sasdad
asd
dadaadad

$ python load_files.py 
                                                   0
0                               asdasd\nada\nadasd\n
1                          sasdad\nasd\ndadaadad\n\n
2  import pandas as pd\nimport os\n\ndata = []\np...
Run Code Online (Sandbox Code Playgroud)