![](/img/trans.png)
[英]Selecting rows in csv file by splitting string on specific charater in Python
[英]Selecting specific rows from CSV file
我在csv文件中有以下行
import csv
with open('testfile.csv', 'wb') as csvfile:
filewriter = csv.writer(csvfile, delimiter = ',')
filewriter.writerow(['var1', 'var2', 'var3', 'var4'])
filewriter.writerow(['var1', 'var2', 'var3', 'var4'])
filewriter.writerow([6.1, 5.0, 3, 420])
filewriter.writerow([6.2, 5.9, 2, 520])
filewriter.writerow([6.5, 5.4, 1, 320])
我的目标是删除重复的行,仅选择var3!= 1的行。但是,返回了意外的结果。
with open('testfile.csv', 'rb') as infile, open('testfile_clean.csv', 'wb') as outfile:
infile.next()
for row in infile:
if row[2] != '1':
outfile.write(row)
testfile_clean.csv包含以下行:
var1,var2,var3,var4
6.2,5.9,2,520
6.5,5.4,1,320
它摆脱了第一行的值,而不是基于是否var3 <>'1'。 关于可能发生的任何想法将不胜感激!
使用python的默认文件读取功能,会将每一行作为单独的字符串提供给您,因此一行将是“ 6.1,5.0,3,420”。 在您发布的代码中,row是该字符串,因此row [2]将是其第三个字符,在此行的情况下为“ 1”,因此您的代码将忽略此行。 python的无类型之美可以再次咬你的经典例子!
解决方案? 您将要使用csv.reader打开文件,该文件会自动以逗号分隔行,以使行“ 6.1,5.0,3,420”为[“ 6.1”,“ 5.0”,“ 3”,“ 420“]。 这是执行此操作的代码:
import csv
with open('testfile.csv', 'rb') as infile, open('testfile_clean.csv', 'wb') as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
reader.next()
for row in reader:
if row[2] != '1':
writer.writerow(row)
在写入csv文件时,您使用的是writerow
,它可以为每个条目写入列表。 为了读取相同的数据,您需要使用reader
,该reader
可以遍历每行,并且您的输入将被视为一个列表。
import csv
with open('testfile.csv', 'r') as infile, open('testfile_clean.csv', 'w') as outfile:
rows = csv.reader(infile)
next(rows)
writer = csv.writer(outfile)
for row in rows:
print(row)
if row[2] != '1':
writer.writerow(row)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.