【问题标题】:How to search a string in Multiple CSV files using Python如何使用 Python 在多个 CSV 文件中搜索字符串
【发布时间】:2020-06-10 15:26:40
【问题描述】:

我有多个不同部门的 .csv 文件,具有相同的标题(姓名、完整地址、部门),完整地址是一个大约 20 - 50 个单词的长字符串,它包括包括城市在内的所有详细信息。 我的每个 .CSV 文件都包含大约 100K 行,我在同一个文件夹中有大约 400 个这样的文件。

我想要做的是,我想为居住在纽约的所有员工(在阅读所​​有 csv 文件后)手动创建一个单独的 csv 文件(生成的文件应包含姓名、完整地址和部门)是不可能的,但我知道在 python 中是可能的。

谁能帮我解决这个问题?

【问题讨论】:

  • 您是否已经创建了数据框?如果您需要解析城市,请添加您的数据样本,请阅读minimal reproducible example
  • 我还没有创建数据框或任何代码。我只是个初学者。
  • 一种可能的方法:在目录中生成 csv 文件列表。创建空列表 y。遍历文件列表。使用 csv 模块 (stackoverflow.com/a/13428432/503835) 逐行读取文件。检查字符串“new york”是否存在于行中,如果不重复,则存储在 y 中。完成读取后转换为数据框并保存到 csv。
  • @eNc 我必须考虑每个文件大约 400 MB,并且有 400 个这样的文件.. 所以一一阅读,它会导致我的系统崩溃吗?

标签: python python-3.x pandas csv


【解决方案1】:

正如建议的那样,由于文件的大小,您可能应该一次只解析一个文件的所有数据,并将任何匹配的行写入一个新的 CSV 文件。这种方法不需要加载整个文件,因此适用于任何大小。

这可以按如下方式完成:

import csv
import glob

write_header = True
output_csv = 'new york.csv'     # assume this is not already used

with open(output_csv, 'w', newline='') as f_output:
    csv_output = csv.writer(f_output)

    for csv_filename in glob.glob('*.csv'):
        if csv_filename != output_csv:
            with open(csv_filename) as f_input:
                csv_input = csv.reader(f_input)
                header = next(csv_input)

                if write_header:
                    csv_output.writerow(header)
                    write_header = False

                for row in csv_input:
                    if "new york" in row[1].lower():
                        csv_output.writerow(row)

它应该生成一个输出new york.csv 文件,其中包含地址列包含单词new york 的任何行。显然,您可能需要改进此测试以涵盖格式错误的地址。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2022-01-16
    • 2023-02-11
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2017-10-23
    • 2014-03-12
    相关资源
    最近更新 更多