gpt4 book ai didi

python - 清理 CSV——开始新行

转载 作者:太空宇宙 更新时间:2023-11-03 15:15:47 24 4
gpt4 key购买 nike

抱歉问了个愚蠢的问题。我不确定我是否只是累了还是什么,但我很难弄清楚解决这个问题的逻辑。

我有一个如下所示的 csv:

Company,CompanyName,
Website,WebsiteName ,
Website, WebsiteName2,
Email, emailData,
Company,NextCompanyName,
Website,websiteName,
Website, WebsiteName2,
Company,NextCompanyName,
Name,PersonName,
Website,websiteName,

如您所见,这是非常糟糕的数据。我想做的是读取整个 CSV,并按公司名称分隔每一行,并尝试组织尽可能多的数据。有时公司有一个人的名字,有时有多个网站,有时有电子邮件,有时没有。

所以我想要的输出是:公司名称、人名、电子邮件地址、Web1、Web2 等

好消息是所有数据每行都有一个分隔符(公司、网站、名称等)。我想要做的是通读 CSV,当它发现一行看起来像 Company、CompanyName 的行时,它会启动一个新行并对数据进行排序(名称到名称列、电子邮件到电子邮件列等,直到遇到另一个看起来像 Company, CompanyName 的行。

我不需要读取/写入 csv 的帮助。我正在寻求有关如何正确迭代数据并将数据排序到需要的位置的帮助。

感谢您给我的任何建议

最佳答案

您可以在迭代文件行时检查记录开始条件。将每个键/值对记录在 dict 中,当您看到开头时,您就知道现有记录已完成。您可以将记录字典中的值设为一个列表,并在找到它们时附加新值。

from collections import defaultdict
import csv
import re

filename = 'mytest.csv'

# test data
open('mytest.csv', 'w').write("""Company,CompanyName,
Website,WebsiteName ,
Website, WebsiteName2,
Email, emailData,
Company,NextCompanyName,
Website,websiteName,
Website, WebsiteName2,
Company,NextCompanyName,
Name,PersonName,
Website,websiteName,""")

# will hold dict for each company
records = []

with open(filename, newline='') as in_fp:
record = defaultdict(list)
for row in csv.reader(in_fp):
if len(row) >= 2:
if row[0].strip() == "Company" and "Company" in record:
# found new company... record old as long as it has data
records.append(record)
record = defaultdict(list)
record[row[0].strip()].append(row[1].strip())

for record in records:
print('----')
print(record)

关于python - 清理 CSV——开始新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43905535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com