我必须将包含特定单词的所有行复制到花药csv
文件中。
我的文件位于.csv
中,我想复制其中一个单元格中包含单词“ Canada”的所有行。我尝试了互联网上给出的各种方法。但是我无法复制我的行。我的数据包含15,000多行。
我的数据集示例包括:
tweets date area
dbcjhbc 12:4:19 us
cbhjc 3:3:18 germany
cwecewc 5:6:19 canada
cwec 23:4:19 us
wncwjwk 9:8:18 canada
代码是:
import csv
with open('twitter-1.csv', "r" ,encoding="utf8") as f:
reader = csv.DictReader(f, delimiter=',')
with open('output.csv', "w") as f_out:
writer = csv.DictWriter(f_out, fieldnames=reader.fieldnames, delimiter=",")
writer.writeheader()
for row in reader:
if row == 'Canada':
writer.writerow(row)
但是此代码无法正常工作,并且出现错误
错误:字段大于字段限制(131072)
答案 0 :(得分:1)
我知道这个问题正在寻求使用Python的解决方案,但是我相信没有Python就能轻松解决此任务。
使用Bash的单行程序:
grep 'canada' myFile.csv > outputfile.csv
答案 1 :(得分:0)
即使没有csv模块,您也可以执行此操作。
int[][]
答案 2 :(得分:0)
假设您的.csv数据(twitter-1.csv
)如下所示:
tweets,date,area
dbcjhbc,12:4:19,us
cbhjc,3:3:18,germany
cwecewc,5:6:19,canada
cwec,23:4:19,us
wncwjwk,9:8:18,canada
使用numpy:
import numpy as np
# import .csv data (skipping header)
data = np.genfromtxt('twitter-1.csv', delimiter=',', dtype='string', skip_header=1)
# select only rows where the 'area' column is 'canada'
data_canada = data[np.where(data[:,2]=='canada')]
# export the resulting data
np.savetxt("foo.csv", data_canada, delimiter=',', fmt='%s')
foo.csv
将包含:
cwecewc,5:6:19,canada
wncwjwk,9:8:18,canada
如果要在canada
的每个条目(每一列)中进行搜索,则可以使用列表推导。假设twitter-1.csv
在canada
列中包含tweets
:
tweets,date,area
dbcjhbc,12:4:19,us
cbhjc,3:3:18,germany
cwecewc,5:6:19,canada
canada,23:4:19,us
wncwjwk,9:8:18,canada
这将返回所有出现canada
的行:
out = [i for i, v in enumerate(data) if 'canada' in v]
data_canada = data[out]
np.savetxt("foo.csv", data_canada, delimiter=',', fmt='%s')
现在,foo.csv
将包含:
cwecewc,5:6:19,canada
canada,23:4:19,us
wncwjwk,9:8:18,canada
答案 3 :(得分:0)
除grep
以外的所有解决方案(如果有grep
可能是最快的解决方案)将整个.csv文件加载到内存中。不要那样做!您可以流式传输文件,一次只在内存中保留一行。
with open('input.csv', 'r') as if, open('output.csv', 'w') as of:
for line in if:
if 'canada' in line:
of.write(line)
注意:我实际上在这台计算机上没有python3,因此此代码上可能有错字。但是我相信,在处理足够大的文件时,它比在操作之前将整个文件加载到内存中更为有效。看到基准会很有趣。