对多个文本文件执行相同的操作

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

【讨论】:

以上是关于对多个文本文件执行相同的操作的主要内容,如果未能解决你的问题,请参考以下文章

我们可以对 hive 中的“文本文件”执行 crud 操作吗

Ubuntu如何使用终端将多个文本文件合并为一个

从在线pdf文件中提取文本(sharepoint)

C++ 使用条件语句读取文本文件

如何使用shell提取多个文本中相同的内容

在文本文件中保存多个数组(python)