遇到这个话题用Python将结果保存到csv文件
所有我需要-写入csv文件的变化。但是。这段代码窃取了我的一些行))不合理的数量(而不是代码中的五行)
你能解释一下为什么他们在这个简单的动作中使用集合吗?为什么这里要用counter呢?
Use csv.writer:
import csv
with open('thefile.csv', 'rb') as f:
data = list(csv.reader(f))
import collections
counter = collections.defaultdict(int)
for row in data:
counter[row[0]] += 1
writer = csv.writer(open("/path/to/my/csv/file", 'w'))
for row in data:
if counter[row[0]] >= 4:
writer.writerow(row)
这一行
counter = collections.defaultdict(int)
创建一个defaultdict
,其值为整数,默认值为0。然后这位
for row in data:
counter[row[0]] += 1
扫描输入,并计算第一个字段中的值在文件中出现的次数。最后,代码只输出第一个值出现至少4次的行。这可以用collections.Counter
来代替,但我不知道十年前是否在标准库中。
不确定在原始代码中发生了什么,但我认为它读取输入并创建数据行字典并为每行分配计数器。因此,如果有两条相同的数据线,这将无法正常工作。然后它使用这个字典来确定哪些是前4行,以便在写入输出时跳过它们(这不是很好地使用字典)。
if counter[row[0]] >= 4:
最重要的是,这是11年前的老答案。当时处理csv文件的Python库(如pandas
)并不常用。现在做这样的事情就容易多了。
import pandas as pd
# semicolon separated and comma decimals, skip first 4 rows
df_in = pd.read_csv("oldfile.csv", delimiter=";", decimal=",", skiprows=(0,1,2,3))
# comma separated and point decimals
df_in.to_csv("newfile.csv", sep=",", decimal=".")