[英]Python and CSV; how to truncate all values in a column?
给定一个简单的CSV文件,如下所示:
Django,Gunslinger,101-707
KingSchultz,Dentist,205-707
Tatum,Marshall,615-707
Broomhilda,Wife,910-707
...,...,...
如何截断最后一列中的所有值,以便仅保留前三位? (不相关:因此可以在数学运算中使用它们)
所需的CSV:
Django,Gunslinger,101
KingSchultz,Dentist,205
Tatum,Marshall,615
Broomhilda,Wife,910
...,...,...
到目前为止,这是我尝试过的:
import csv
import re
r = csv.reader(open(input.csv))
for row in r:
re.sub('\-.*', '', row[3])
writer = csv.writer(open('output.csv', 'w'))
writer.writerow(row)
我已经验证了re.sub
的regex
可以正常工作。 尝试了数十种变体,搜索了许多小时,但无法获得所需的输出。
re.sub
返回带有替换的字符串。 它不会影响第三个参数本身
首先是re.sub
返回一个新值,它不会替换该行中的值。
其次, row
是一个正在运行的变量,您应该在循环中处理它。
在这里,您的代码已修改为可以正常工作(适用于python3):
import csv
import re
r = csv.reader(open('.../test.csv'))
with open('.../test2.csv', 'w') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
for row in r:
row[2] = re.sub('\-.*', '', row[2])
writer.writerow(row)
不使用re
模块,
import csv
r = csv.reader(open("sample.csv", "rb"))
writer = csv.writer(open("output.csv", "wb"))
for row in r:
row[2] = row[2][:3]
writer.writerow(row)
正如@TigerRedMike在Python 3.X中指出的那样,应该分别使用'r'
和'w'
而不是'rb'
和'wb'
来读写文件。
import csv
import re
r = csv.reader(open('input.csv'))
writer = csv.writer(open('/tmp/output.csv', 'w'))
for row in r:
tmp = re.sub('\-.*', '', row)
writer.writerow(tmp)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.