【发布时间】:2018-08-23 21:14:21
【问题描述】:
我有一个自动生成的 CSV 文件,它提供了我需要的数据,但一些单独的单元格中有额外的字符。
COLUMN1 COLUMN2 COLUMN3
'Foo325GoodData' Bar:388GoodData 383GoodData
'Foo123GoodData' Bar:998GoodData 293GoodData
我需要在不更改 3 位数据的情况下删除 foo、bar、引号和冒号。
这是我尝试过的代码,但它只是删除了我的所有数据:
import csv
import string
input_file = open('data.csv', 'r')
output_file = open('data_cleaned.csv', 'w')
data = csv.reader(input_file)
writer = csv.writer(output_file,quoting=csv.QUOTE_ALL)
foo = 'foo'
bar = '"bar:u'
for line in data:
line = str(line)
new_line = str.replace(line,foo,'')
new_line2 = str.replace(line,bar,'')
writer.writerow(new_line.split(','))
writer.writerow(new_line2.split(','))
按照下面 gboffi 的说明,我尝试了以下方法:
cleaner.py
good.csv
from __future__ import print_function
from sys import stdin
q = '"' + "'"
number = 'foo:'
print(next(stdin) , end='')
for line in stdin:
toks = [tok.strip(q).lstrip(number) for tok in line.split()]
print(' '.join(toks))
这会生成一个新的 CSV,但似乎没有删除任何不良数据。
【问题讨论】:
-
你为什么要编写 Python 来做到这一点?为什么不
sed? -
您可以导入 re: 并使用
new_line = re.sub('[^0-9 ]+','',str(line)) -
perl或sed一定会更快地解决您的问题 -
因为你没有空格,你可以使用
new_line = re.sub('\\D+','',str(line)) -
我建议你应用一些基本的调试技巧——你很快就会发现问题。当您创建一个新值时,立即打印出结果变量:
line、new_line和new_line2。
标签: python python-2.7 csv parsing python-2.x