Python 如何读取多个文本文件,其中我们只读取同一组的所有文本文件?

Python 如何读取多个文本文件,其中我们只读取同一组的所有文本文件?,python,python-3.x,text-files,Python,Python 3.x,Text Files,我的目录中有几个这样的文本文件 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.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
那么,我怎样才能像我读的那样读它们呢?首先,把它们组合成一个数据框,写进一个组合文本文件,然后把它们一起读,将它们写入数据帧,依此类推,直到目录中的最后一个文件

所有文本文件的内部结构如下所示:

10023223\n
903812398\n
284934289\n
{空行占位符}
没有标题,但每个文本文件的末尾都有一个空行。我是python新手,如果您能帮助我,我将不胜感激

这就是我取得的成绩:

导入操作系统
新列表=[]
对于os.walk(“./textFilesFolder”)中的根目录、目录和文件:
对于文件中的文件:
如果文件.endswith('.txt'):
将open(os.path.join(root,file),'r')作为f:
text=f.read()
新建列表。追加(文本)
打印(新列表)

您需要每日摘要,将每小时的文件链接在一起。 好的,很好

创建Y-m-d日期:

现在,在循环中,您可以将现有的
if
替换为:

        m = date_re.search(file)
        if m:
            date = m.group(1)
            print(f'Working on day {date} ...')
            ...
            prev_date = date
解析出日期后,您现在可以注意到日期的变化, 也许通过比较
prev_date==date
, 并采取适当的行动,如写入新文件

或考虑使用<代码>打开(f-输出-{日期},txt’,‘a’)作为fOut:< /Cord> 允许您附加到(可能已经存在)文件。 这样文件系统就会为您记住一些事情, 而不是需要跟踪程序中的更多变量

顺便说一句,您使用的
walk()
非常好,值得称赞。 但是对于这个文件目录,结构非常简单 您可以使用:

编辑

假设我们从一块清晰的石板开始,没有输出文件:

$ rm output-*.txt
然后我们可以在循环中追加,类似于
$cat hour01 hour02>day31
。 或者,类似于
$rm day31;cat hour01>>第31天;cat hour02>>第31天

        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次,您将得到一个大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)
输出:

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

谢谢你,先生。我没有很好地理解你。对不起,这个问题。我已经有文件了。我只需要在一起读取所有2020-01-21文本文件的地方读取它们,然后制作一个2020-01-21文本文件,将所有读取的2020-01-21文本块组合在一起。你的代码应该进入我的循环吗?没关系,我现在明白你的意思了。明白了!!谢谢你老板:)谢谢你,希瓦克,我会选择这个作为回答。然而,朱赫首先回答了这个问题。但是非常感谢你的帮助,伙计@Wannabesmit完全没有问题:)
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)
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