对多个文本文件执行相同的操作
Posted
技术标签:
【中文标题】对多个文本文件执行相同的操作【英文标题】:Performing the same operation on multiple text files 【发布时间】:2021-07-25 09:44:02 【问题描述】:假设以下示例来自名为 Unit1Data.txt
的文本文件:
32 2020-04-28 09:15:11.98 99
33 2020-04-28 09:15:27.87 22
NEW 2020-04-28 09:56:31.89 9
Total 73749
Upload #29, 45392 records
Unit: Unit1 Location: AA11
--------- upload 29 start ---------
U 2011-09-20 14:06:20.78 upload 28 complete
D 2017-04-19 09:11:59.00 00:01:02.30 HR 0000_0000000162946581 A24 8 7
D 2017-04-19 09:12:02.25 00:00:01.00 HR 0000_0000000161638293 A22 3 3
我编写了以下脚本,它从以D
开头的行中提取数据并添加一列来表示Unit
,它可以在以“Unit”开头的文本文件的行中找到(我做到了)这种方式是因为它并不总是在同一行,但它总是以“Unit”开头)。最后,它将数据转换为 csv:
import pandas as pd
import re
un = []# to store unit name
with open('Unit1Data.txt', 'r') as fi:
for line in fi:
if line.startswith("Unit"):
un.append(line.split()[1])
EmptyString = ""
val = str(un)
val = re.sub(r'[\w\s]', EmptyString, val)
print(val)
out = []#to store output
with open('Unit1Data.txt', 'r') as fi:
for line in fi:
if line.startswith("D"):
out.append(line.split()[0:])
data = pd.DataFrame(out,
columns=['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9'])
#I have more meaningful column names this is just for example
data['Unit'] = val
print(data)
data.to_csv('Test.csv', index=False)
假设上面的示例文本文件来自“Unit1”。对于“Unit2”和“Unit3”,我有一个具有相同结构的单独文本文件(我们将这些文本文件分别称为“Unit2Data.txt”和“Unit3Data.txt”)。我想对所有 3 个文本文件执行这些相同的操作,但我想将所有 3 个单元的数据合并到一个 csv 中(而不是 3 个单独的)。假设这 3 个文件存储在我的工作目录 (C:\Users\Me\Desktop\MyProject
) 中,有人可以演示如何组合这两个 for 循环(可能在用户定义的函数中执行相同的操作),以及如何在多个 txt 文件上迭代操作哪些是使用 python3 语法存储在用户工作目录中的?
【问题讨论】:
【参考方案1】:首先,您可以将代码重构为一个函数,该函数将文件名作为输入,并生成一个数据帧。
之后,您可以使用 python 的glob
(https://docs.python.org/3/library/glob.html)(例如glob.glob('C:Users\Me\Desktop\MyProject\*')
来获取文件列表。
最后,您需要将 3 个数据帧组合成一个数据帧,然后您可以调用 to_csv
。
合并请看https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html
【讨论】:
【参考方案2】:这里是如何遍历所选文件的列表。 如果您需要有关完整程序升级的帮助,则需要使用可用的教程和示例;这个问题对于 Stack Overflow 来说太宽泛了。
file_list = [
'Unit1Data.txt',
'Unit2Data.txt',
'Unit3Data.txt',
... # Fill in whatever files you want to use
]
for unit_file in file_list:
with open(unit_file, 'r') as fi:
# Continue with the rest of your code
【讨论】:
以上是关于对多个文本文件执行相同的操作的主要内容,如果未能解决你的问题,请参考以下文章