我对Python中的csv模块相当缺乏经验,并且想知道是否有人可以提供任何指示。我一直在寻找关于这个问题的许多其他问题,但我没有找到答案。
我想要做的就是更改值,在这种情况下它将是“n / a”并在我的csv文件中将其替换为0。这些不适用的值都在所有列中,因此我无法将其精确定位到一个特定列。
到目前为止,这是我的代码:
with open("MyCSV.csv","rb") as infile,open("Write.csv","wb") as outfile:
reader= csv.reader(infile)
writer= csv.writer(outfile)
conversion= set('(n/a)')
for row in reader:
newrow=[''.join('0' if c in conversion else c for c in entry)for entry in row]
writer.writerow(newrow)
我在结果中遇到的问题是任何a或n都转换为0.这显然是因为正在读取每个'n'或'a'应该被转换。
感谢有人给予的任何帮助。
答案 0 :(得分:1)
set
接受一个序列并使用该序列中的所有项来制作该集合。由于字符串是序列,你最终得到的是:
set('(n/a)')
Out[7]: {'(', ')', '/', 'a', 'n'}
即。每个角色作为一个项目。如果您希望该集合具有一个项目,即完整(不适用)字符串,则使用一个项目创建列表:
set(['(n/a)'])
Out[8]: {'(n/a)'}
答案 1 :(得分:1)
以下是使用csv
模块
with open("MyCSV.csv","rb") as infile,open("Write.csv","wb") as outfile:
reader = csv.reader(infile)
writer = csv.writer(outfile)
for row in reader:
row = [x.replace('n/a', '0') if x == 'n/a' else x for x in row]
writer.writerow(row)
Regex
可能是更好的选择,如下所示:
import re
with open("MyCSV.csv", "rb") as f1:
lines = f1.read()
for line in re.sub('n/a', '0', lines):
print line,