给出一个简单的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)
我已验证regex
中的re.sub
是否正常工作。尝试过几十种变化,多次搜索,但无法获得所需的输出。
答案 0 :(得分:0)
re.sub
返回带替换的字符串。它不会影响第三个参数本身
答案 1 :(得分:0)
首先是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)
答案 2 :(得分:0)
不使用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中指出的那样,应该分别使用'rb'
和'wb'
来代替'r'
和'w'
来读取和写入文件。
答案 3 :(得分:0)
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)