我希望我的問題有道理。我正在尋找一種方法來讀取一個csv文件,並將字典映射到每個單元格。我可以讓它在沒有csv的情況下工作,但是我在閱讀csv文件時很難使其工作。Python CSV - 爲每個單元格使用字典
注:
string0 would be cell A1 or row[0]
string1 would be cell B1 or row[1]
string2 would be cell C1 or row[2]
這是我到目前爲止有:
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)
上面的代碼工作完全按照我想讓它工作,但有一個困難時期試圖使它IM讀取csv文件時工作。
非常感謝你
編輯#1:********************************* **************
這裏是sample1.csv的摘錄:
A,123 MAIN STREET,(123) 456-7890
B,888 TEST ROAD,(222) 555-5555
對不起,如果代碼心不是更清潔/更清晰,但是這就是爲什麼我我在尋求指導。
從本質上講,每一列都會有一個與之關聯的字典,因此根據單元格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
希望有人能幫助
謝謝
編輯#3 ********************* ************************************************** **************************************
可以進行如下改進(語法,縮進等):
sample1。CSV:
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
just wonderin g如果上述代碼能夠以更有效的方式改進/書寫。
謝謝
請問您可以添加'sample1.csv'的摘錄嗎?至少第一個幾行... – chuckus 2014-08-31 20:05:42
它不清楚你有什麼代碼,至於它如何與每個單元格的字典創建有關。請詳細說明並顯示樣本輸入和輸出。 – martineau 2014-08-31 21:43:53
好吧,我添加了sample1.csv的摘錄,並試圖進一步解釋我的問題。 – jes516 2014-08-31 22:43:30