如何使用python仅将所需行从一个csv文件复制到另一个csv文件?
我正在尝试编写一个程序,仅当one.csv文件的第二列中至少有以下一个('Urology'、'Urologist'、'Urologist'、'Urologist'、'MD'、'D.name')时,才将一个.csv文件的行复制到五个.csv文件 例如: 一个.csv文件如下所示(如下所示) 现在,在运行我的代码之后,我应该得到包含以下内容的5.csv文件(如下) 只有至少包含以下内容之一的行(“泌尿科”、“泌尿科”、“泌尿科”、“MD”、“医生姓名”)才应复制到five.csv 但是,我得到了这个如何使用python仅将所需行从一个csv文件复制到另一个csv文件?,python,csv,Python,Csv,我正在尝试编写一个程序,仅当one.csv文件的第二列中至少有以下一个('Urology'、'Urologist'、'Urologist'、'Urologist'、'MD'、'D.name')时,才将一个.csv文件的行复制到五个.csv文件 例如: 一个.csv文件如下所示(如下所示) 现在,在运行我的代码之后,我应该得到包含以下内容的5.csv文件(如下) 只有至少包含以下内容之一的行(“泌尿科”、“泌尿科”、“泌尿科”、“MD”、“医生姓名”)才应复制到five.csv 但是,我得到了这个
12th may urologist MS urologist very good
12th June urologist MS urologist very good
没有标题行,并且通过替换新文件中的D.name列,“speciality”似乎翻了一番。从昨天起我就一直试图解决这个问题,但根本没有解决办法
我该如何解决这个问题
这是我的代码:
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:
...
此位在这里是不必要的,您将迭代行[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)
现在不必担心关闭文件。摆脱内部循环
for row[1] in 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
另一种更简洁的方法是将所有要搜索的字符串保存在一个元组中,并使用任何运算符搜索所有字符串。这将避免在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