Python和CSV;如何截断列中的所有值?

时间:2016-06-13 07:14:38

标签: python regex csv

给出一个简单的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是否正常工作。尝试过几十种变化,多次搜索,但无法获得所需的输出。

4 个答案:

答案 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)