gpt4 book ai didi

python - 如何在Python中将标题行复制到新的csv

转载 作者:行者123 更新时间:2023-12-01 03:26:23 25 4
gpt4 key购买 nike

我似乎不知道如何将我的标题行从 master 复制到匹配...我需要抓取 master csv 中的第一行并首先将其写入匹配中,然后写入剩余的行(如果它们匹配)标准...

with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
for line in master:
if any(city in line.split('","')[5] for city in citys) and \
any(state in line.split('","')[6] for state in states) and \
not any(category in line.split('","')[2] for category in categorys):
matched.write(line)

请帮忙。我是 python 新手,不知道如何使用 pandas 或其他任何东西......

最佳答案

您可以只使用文件的第一行来读取并将其写回到要写入的文件中:

with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
matched.write(next(master)) # can't use readline when iterating on the file afterwards

看来您确实需要 csv 模块来完成其余的工作。我将编辑我的答案以尝试朝这个方向做一些事情

有了csv模块,就不需要那些不安全的split了。逗号是默认分隔符,引号也得到正确处理。所以我就写:

import csv
with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
cr = csv.reader(master)
cw = csv.writer(matched)
cw.writerow(next(cr)) # copy title

for row in cr: # iterate on the rows, already organized as lists
if any(city in row[5] for city in citys) and \
any(state in row[6] for state in states) and \
not any(category in row[2] for category in categorys):
cw.writerow(row)

顺便说一句,您的过滤器会检查 city 是否包含在 row[5] 中,但也许您想要完全匹配。例如:"York" 将匹配 "New York",这可能不是您想要的。因此,我的建议是使用 in 来检查每个条件的字符串是否在字符串列表中:

import csv
with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
cr = csv.reader(master)
cw = csv.writer(matched)
cw.writerow(next(cr)) # copy title
for row in cr:
if row[5] in citys and row[6] in states and not row[2] in categorys:
cw.writerow(row)

使用生成器理解甚至可以更好地一次写入所有行:

import csv
with open('master.csv', 'r') as master, open('match.csv', 'w') as matched:
cr = csv.reader(master)
cw = csv.writer(matched)
cw.writerow(next(cr)) # copy title
cw.writerows(row for row in cr if row[5] in citys and row[6] in states and not row[2] in categorys)

请注意,citysstatescategorys 作为 set 会比 更好列表,因此查找算法要快得多(您没有提供该信息)

关于python - 如何在Python中将标题行复制到新的csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41370183/

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