繁体   English   中英

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

[英]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.subregex可以正常工作。 尝试了数十种变体,搜索了许多小时,但无法获得所需的输出。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM