Python CSV-为每个单元格使用字典
我希望我的问题有意义。我正在寻找一种方法来读取csv文件,并将字典映射到每个单元格。我可以让它工作没有csv,但我有一个艰难的时间让它工作时,阅读csv文件 注: 这就是我到目前为止所做的:Python CSV-为每个单元格使用字典,python,csv,dictionary,cell,Python,Csv,Dictionary,Cell,我希望我的问题有意义。我正在寻找一种方法来读取csv文件,并将字典映射到每个单元格。我可以让它工作没有csv,但我有一个艰难的时间让它工作时,阅读csv文件 注: 这就是我到目前为止所做的: dict0 = {'A':'CODE1', 'B':'CODE2'} text0 = [] string0 = 'A' dict1 = {'avenue':'ave', 'street':'st', 'road':'rd', 'court':'ct'} text1 = [] string1 = '123
dict0 = {'A':'CODE1', 'B':'CODE2'}
text0 = []
string0 = 'A'
dict1 = {'avenue':'ave', 'street':'st', 'road':'rd', 'court':'ct'}
text1 = []
string1 = '123 MAIN AVENUE'
dict2 = {'(':'', ')':'', '-':'', ' ':'', '/':'', '\\':''}
text2 = []
string2 = '(123) 456/7890'
for i in string0:
newcode = dict0.get(i,i)
text0.append(newcode)
print ' '.join(text0)
for i in string1.lower().split(' '):
newaddress = dict1.get(i.lower(),i)
text1.append(newaddress)
print ' '.join(text1)
for i in string2:
newphone = dict2.get(i,i)
text2.append(newphone)
print ''.join(text2)
上面的代码完全按照我的预期工作,但在读取csv文件时,我很难让它正常工作
多谢各位
编辑#1:******************************************************************************
以下是sample1.csv的摘录:
A,123 MAIN STREET,(123) 456-7890
B,888 TEST ROAD,(222) 555-5555
A,123 MAIN STREET,(123) 456-7890
B,888 TEST ROAD,(222) 555-5555
如果代码不够清晰,很抱歉,但这就是我寻求指导的原因
本质上,每一列都有一个与其关联的字典,因此“code”列将根据单元格A1(“a”或“B”)的值写入“CODE1或CODE2”
列2将有dict1{}与之关联,并将清理地址列。
第3列将有dict2{}与之关联,并将从电话号码列中删除(,),/,\项
我的问题是我不知道如何启动代码。如果我将单元格信息设置为变量(请参阅上面的代码,变量:string0、string1、string2),我可以编写代码,但我不知道如何开始迭代csv文件
多谢各位
编辑2:*********************************************************************************************
这是我尝试使用import csv
dict0 = {'A':'CODE1', 'B':'CODE2'}
text0 = []
dict1 = {'avenue':'ave', 'street':'st', 'road':'rd', 'court':'ct'}
text1 = []
dict2 = {'(':'', ')':'', '-':'', ' ':'', '/':'', '\\':''}
text2 = []
import csv
with open('O:/sample1.csv', 'rb') as c:
reader = csv.reader(c)
for row in reader:
for i in row[0]:
newcode = dict0.get(i,i)
text0.append(newcode)
for i in row[1].lower().split(' '):
newaddress = dict1.get(i.lower(),i)
text1.append(newaddress)
for i in row[2]:
newphone = dict2.get(i,i)
text2.append(newphone)
print str(' '.join(text0)) + ',' + str(' '.join(text1)) + ',' + str(''.join(text2))
印刷品:
CODE1,123 main st,1234567890
CODE1 CODE2,123 main st 888 test rd,12345678902225555555
我想打印:
CODE1,123 main st,1234567890
CODE2,888 test rd,2225555555
希望有人能帮忙
多谢各位
编辑*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/strong>
能否改进以下内容(语法、缩进等):
sample1.csv:
A,123 MAIN STREET,(123) 456-7890
B,888 TEST ROAD,(222) 555-5555
A,123 MAIN STREET,(123) 456-7890
B,888 TEST ROAD,(222) 555-5555
代码如下:
import csv
newcsv = csv.writer(open('O:/csvfile1.csv', 'ab'))
with open('O:/sample1.csv', 'rb') as c:
reader = csv.reader(c)
dict0 = {'A':'CODE1', 'B':'CODE2'}
dict1 = {'avenue':'ave', 'street':'st', 'road':'rd', 'court':'ct'}
dict2 = {'(':'', ')':'', '-':'', ' ':'', '/':'', '\\':''}
# read element in *reader*
for row in reader:
text0 = []
text1 = []
text2 = []
newline = []
# read element in *row*
for i in row[0]:
newcode = dict0.get(i,i)
text0.append(newcode)
newline.append(' '.join(text0))
for i in row[1].lower().split(' '):
newaddress = dict1.get(i.lower(),i)
text1.append(newaddress)
newline.append(' '.join(text1))
for i in row[2]:
newphone = dict2.get(i,i)
text2.append(newphone)
newline.append(''.join(text2))
newcsv.writerow(newline)
print newline
打印以下内容:
['CODE1', '123 main st', '1234567890']
['CODE2', '888 test rd', '2225555555']
创建csvfile1.csv(使用“|”作为“单元格分隔符”),它正是我想要的:
CODE1|123 main st|1234567890
CODE2|888 test rd|2225555555
只是想知道上面的代码是否可以以更有效的方式进行改进/编写
谢谢输出混乱的原因是您没有清除循环每个周期上的
文本
变量。虽然有下面的修复方法,但我建议至少阅读,在没有太多全局变量的情况下重写代码,这样您就不会遇到像现在这样的问题
with open('O:/sample1.csv', 'rb') as c:
reader = csv.reader(c)
for row in reader:
text0 = []
text1 = []
text2 = []
for i in row[0]:
newcode = dict0.get(i,i)
text0.append(newcode)
for i in row[1].lower().split(' '):
newaddress = dict1.get(i.lower(),i)
text1.append(newaddress)
for i in row[2]:
newphone = dict2.get(i,i)
text2.append(newphone)
print str(' '.join(text0)) + ',' + str(' '.join(text1)) + ',' + str(''.join(text2))
请添加
sample1.csv
中的摘录,好吗?至少在前几行……不清楚您的代码是做什么的,因为它与为每个单元格创建字典有什么关系。请详细说明并显示示例输入和输出。好的,我添加了sample1.csv的摘录,并试图进一步解释我的问题。您认为我发布的代码(编辑#3)可以改进吗?如果是的话,你能提供一些如何做的建议/提示吗?