[英]Python read txt files into a dataframe
我試圖將 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"]))
我已將分隔符設置為表格,因為我認為它根本不會影響文本的攝取。 任何想法這里的問題是什么?
您正在將電子郵件作為 CSV 文件閱讀,因此文件內容將是:
在每個制表符分隔符處拆分以創建一列; 無論您選擇什么分隔符,我懷疑這都是一個糟糕的選擇,因為任何字符都可能出現在您的電子郵件正文中;
電子郵件中的每個換行符都會創建一個新行(這可能解釋了您的 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)
下面是這個動作,因為它是一個例子:
$ 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...
在閱讀了@paul-g 的答案后,我決定換一種方式去做。 對於上下文,我的應用程序用於 NLP 項目。 我的文件具有唯一標識符,因此使用列表方法並不是我想要的,我決定使用字典方法進行處理。 文件名是我的唯一標識符。 請注意,如果您的目錄除了要加載的文件之外還有其他文件,您可能需要進行額外的清理。 我的目錄只有我的文本文件。 與@paul-g 答案中的ls
示例不同,我的 python 文件位於不同的目錄中,因此 python 文件未包含在我的數據框中。
import pandas as pd
import os
file_names = os.listdir('<folder file path here>')
# Create Dictionary for File Name and Text
file_name_and_text = {}
for file in file_names:
with open('<folder file path here>' + file, "r") as target_file:
file_name_and_text[file] = target_file.read()
file_data = (pd.DataFrame.from_dict(file_name_and_text, orient='index')
.reset_index().rename(index = str, columns = {'index': 'file_name', 0: 'text'}))
這將為您提供如下數據框:
索引文件名文本
0 file1.txt 這是來自文件 1 的文本
1 file2.txt 這是文件 2 中的文本
編輯:如果您有很多小文本文件,可以將其調整為使用 Python 多線程功能 (ThreadPool) 來加快加載時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.