如何使用python仅将所需的行从一个csv文件复制到其他csv文件?

时间:2017-07-04 17:02:29

标签: python csv

我正在尝试编写一个将one.csv文件的行复制到five.csv的程序,只要存在以下至少一个(' Urology','泌尿科医生', &urcologists',' MD' D.name')在one.csv文件的第二列。

例如: one.csv文件如下所示。

date        D.name      location        speciality      comment
12th may    sth MD          MS          urologist       very good 
12th June   sth             MS          urologist       very good 

现在运行我的代码后,我应该得到带有以下内容的five.csv文件(下面)。

date        D.name      location        speciality      comment
12th may    sth MD          MS          urologist       very good 

只有至少包含以下其中一项的行(' Urology''泌尿科医生','泌尿科医生'' MD' ,' Doctor Name')应该被复制到five.csv。

但是,我得到了这个

12th may    urologist           MS          urologist       very good 
12th June   urologist           MS          urologist       very good 

没有标题行和'特色'似乎通过替换新文件中的D.name列加倍。自昨天以来我一直试图解决这个问题但根本没有解决方案。

我该如何解决这个问题?

这是我的代码:

import csv
input = open('test.csv', 'rb')
output = open('first_test.csv', 'wb')
writer = csv.writer(output)
for row in csv.reader(input):
    for row[1] in row:
        if (('Urology' in row[1]) or ('Urologist' in row[1]) or ('Urologists' in row[1]) or ('MD' in row[1]) or ('D.name' in row[1])):
            writer.writerow(row)

2 个答案:

答案 0 :(得分:2)

摆脱内循环。

.news__item {
     flex: 1 0 25%;
}

这里不需要这个位,你最终会迭代for row[1] in row: ... 中的每个字符,并多次执行相同的操作。

在重构代码时,我建议使用row[1]语句来处理您的文件:

with

您现在不必担心关闭文件。

答案 1 :(得分:0)

另一种更简洁的方法是将所有待搜索的字符串保存在元组中,并使用任何运算符搜索所有字符串。这将避免在if条件中添加额外条件,而只需要在预期元组中添加新字符串。

import platform
import csv

def readWrite():
  ## List all the to-be-searched strings
  expected = ('Urology', 'Urologist', 'Urologists', 'MD', 'D.name')
  with open('test.csv', 'r') as input, open('first_test.csv', 'w') as output: 
    writer = csv.writer(output)
    for row in csv.reader(input):
      ## search all strings in above listed list
      if any(string in row[1] for string in expected):
        writer.writerow(row)
  with open('first_test.csv', 'r') as f:
    print (f.read())


print("Python version : " + platform.python_version())
readWrite()

示例运行

Python version : 3.6.1
date,D.name,location,speciality,comment

12th may,sth MD,MS,urologist,very good