如何使用python将包含特定单词的Excel(.csv)整行复制到另一个csv文件中?

时间:2019-07-15 23:31:45

标签: python csv

我必须将包含特定单词的所有行复制到花药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)

4 个答案:

答案 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.csvcanada列中包含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,因此此代码上可能有错字。但是我相信,在处理足够大的文件时,它比在操作之前将整个文件加载到内存中更为有效。看到基准会很有趣。