python - 如何读取多个文本文件,我们只读取同一组的所有文本文件?
问题描述
我的目录中有几个这样的文本文件,
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
一起,将它们写入一个数据框等等,直到目录中的最后一个文件.
所有文本文件的内部结构如下所示:
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:
让您附加到(可能已经存在的)文件。这样文件系统就会为您记住事情,而不是需要跟踪程序中的更多变量。
顺便说一句,您的使用walk()
非常好,对此表示赞赏。但是对于这个文件目录,结构很简单,您可以使用glob:
new_list = []
for file in glob.glob('id-*.txt'):
...
编辑
假设我们从一个清晰的石板开始,没有输出文件:
$ rm output-*.txt
然后我们可以在一个循环中追加,类似于$ cat hour01 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 次,你最终会得到一个比你希望的大 N 倍的输出文件。
推荐阅读
- javascript - Azure Maps SDK 弹出窗口在初始加载后未打开
- python - 如何在 Python 中对 Pandas 行进行分组并将输出呈现为字典?
- python - 异步等待在端点中使用以从 SQL 数据库中获取结果时不起作用
- java - 如何仅使用 Jpa 规范过滤输入参数?
- javascript - Repo.js 没有出现在我的 HTML 网站中
- python - 如何通过数据框中的给定百分比将一个数量分成 5 个产品
- javascript - 光滑的轮播'init'功能不起作用
- azure-devops - F400813: 用户 '' 无权访问此资源
- python - 为 python 包设置自定义库路径
- c# - “对象引用未设置为对象实例”的列表错误。