簡體   English   中英

如何讀取多個文本文件,我們只讀取同一組的所有文本文件?

[英]How to read multiple texts files, where we read all text files only of same group?

我的目錄中有幾個這樣的文本文件,

id-2020-01-21-22.txt
id-2020-01-21-23.txt
id-2020-01-22-00.txt
id-2020-01-22-01.txt
id-2020-01-22-02.txt
id-2020-01-23-00.txt
id-2020-01-24-00.txt

那么我如何閱讀它們,就像我首先一起閱讀id-2020-01-21-22.txtid-2020-01-21-23.txt ,將它們制成數據框,將它們寫入組合文本文件,然后將id-2020-01-22-00.txt & id-2020-01-22-01.txt & id-2020-01-22-02.txt一起寫入 dataframe 等等,直到目錄中的最后一個文件。

所有文本文件的內部結構如下所示:

100232323\n
903812398\n
284934289\n
{empty line placeholder}

沒有標題,但每個文本文件的末尾都有一個空行。 我是 python 的新手,如果你能幫助我,不勝感激。

這是我已經走了多遠:

import os

new_list = []
for root, dirs, files in os.walk('./textFilesFolder'):
    for file in files:
        if file.endswith('.txt'):
            with open(os.path.join(root, file), 'r') as f:
                text = f.read()
                new_list.append(text)


print(new_list)

您需要將每小時文件連接在一起的每日摘要。 好的,很好。

創建一個 Ymd 日期正則表達式

import re

date_re = re.compile(r'^id-(\d{4}-\d{2}-\d{2})-\d{2}\.txt$')
prev_date = None

現在在您的循環中,您可以將現有的if替換為:

        m = date_re.search(file)
        if m:
            date = m.group(1)
            print(f'Working on day {date} ...')
            ...
            prev_date = date

解析出日期后,您現在可以通過比較是否prev_date == date來注意到它何時發生變化,並采取適當的措施,例如寫入新文件。

或者考慮使用with open(f'output-{date}.txt', 'a') as fout:讓你 append 到一個(可能已經存在的)文件。 這樣文件系統就會為您記住事情,而不是需要跟蹤程序中的更多變量。

順便說一句,您對walk()的使用非常好,對此表示贊賞。 但是對於這個文件目錄,結構很簡單,您可以使用glob

new_list = []
for file in glob.glob('id-*.txt'):
    ...

編輯

假設我們從一個清晰的石板開始,沒有 output 文件:

$ rm output-*.txt

然后我們可以在一個循環中只使用 append ,類似於$ cat hour01 hour02 > day31 或者,同樣的事情,類似於$ rm day31; cat hour01 >> day31; cat hour02 >> day31 $ rm day31; cat hour01 >> day31; cat hour02 >> day31 $ rm day31; cat hour01 >> day31; cat hour02 >> day31

        m = date_re.search(file)
        if m:
            date = m.group(1)
            print(f'Working on day {date} ...')
            with open(file) as fin:
                with open(f'output-{date}.txt', 'a') as fout:
                    fout.write(fin.read())

就是這樣,你完成了,我們閱讀每小時的文本。 並將其寫入每日文件的末尾。

我提到上面的rm是因為,如果您正在調試並且運行兩次或 N 次,您最終會得到一個 output 文件,該文件比您希望的大 N 倍。

您也可以嘗試這樣做以提高可讀性。

from collections import defaultdict
import os
import pandas as pd

data = defaultdict(list)
for i in (os.listdir('files/')): # here files is a folder in current directory.
    print(i)                     # which has your text files.
    column = i.split('-')[3]
    with open('files/'+i, 'r') as f:
        file_data = f.read().replace('\n', ' ').split(' ')
        data[column].extend(file_data[:-1])
df = pd.DataFrame(data)
print('---')
print(df)

Output:

id-2020-01-22-01.txt
id-2020-01-22-00.txt
id-2020-01-21-23.txt
id-2020-01-21-22.txt
---
          22          21
0    1006523  1002323212
1   90381122  9038123912
2   28493423   284934212
3  100232323   100232323
4  903812332   903812392
5  284934212   284934289

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM