繁体   English   中英

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

[英]How do I copy only the required rows from one csv file to other csv file using python?

我试图编写一个程序,仅在以下至少一项(“泌尿科”,“泌尿科医师”,“泌尿科医师”,“ MD”,“ D.name”)中将one.csv文件的行复制到Five.csv )在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 

仅应将具有以下至少一项(“泌尿科”,“泌尿科医师”,“泌尿科医师”,“ MD”,“医生姓名”)的行复制到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)

摆脱内循环。

for row[1] in row:
    ...

这一点在这里是不必要的,您将最终遍历row[1]每个字符并多次执行相同的操作。

重构代码时,建议使用with语句处理文件:

with open('test.csv', 'rb') as input, open('first_test.csv', 'wb') as output: 
    writer = csv.writer(output)
    for row in csv.reader(input):
        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)

您不必担心立即关闭文件。

另一种更清洁的方法是将所有要搜索的字符串保存在元组中,并使用任何运算符搜索所有字符串。 这样可以避免在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM