Я написал код для чтения CSV в словарь Python, который отлично работает. Я пытаюсь вернуть словарь в CSV. Я написал следующее:
import csv
itemDict={}
listReader = csv.reader(open('/Users/broberts/Desktop/Sum_CSP1.csv','rU'), delimiter = ',', quotechar='|')
for row in listReader:
fID = row[0]
fClassRange = row[1]
fArea = row[2]
if itemDict.has_key(fID):
itemDict[fID][fClassRange]=fArea
else:
itemDict[fID] = {'5.0 to 5.25':'','5.25 to 5.5':'','5.5 to 5.75':'','5.75 to 6.0':'','6.0 to 6.25':'','6.25 to 6.5':'','6.5 to 6.75':'','6.75 to 7.0':'','7.0 to 7.25':'','7.25 to 7.5':'','7.5 to 7.75':'','7.75 to 8.0':'','8.0 to 8.25':'',}
itemDict[fID][fClassRange]=fArea
listWriter = csv.writer(open('/Users/broberts/Desktop/Sum_CSP1_output.csv', 'wb'), delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
for a in itemDict:
print a
listWriter.writerow(a)
В последнем блоке listWriter ничего не будет записывать в CSV, хотя напечатает. Я считаю, что это как-то связано с неупорядоченностью словаря. Мне действительно нужно записать fID и каждый из ключей, связанных с каждым fID (fClassRange, например, «от 5,0 до 5,25»), а затем значение fArea, связанное с каждым fClassRange в CSV, но я даже не зашел так далеко в мой код, так как я не могу понять, как записать даже fID.
Я попытался использовать DictWriter
, но не могу понять, как определить, какие требуются имена полей .
Пример данных:
mydict = [{"col1": 1000, "col2": 2000}, {"col1": 3000, "col2": 4000}]
Однострочник для преобразования списка диктов в CSV с использованием панд:
import pandas as pd
pd.DataFrame(mydict).to_csv('out.csv', index=False)
Результаты:
col1,col2
1000,2000
3000,4000
Это то, что я использую, это просто и прекрасно работает для меня. когда у вас есть только один словарь, используйте это
my_dict = {"tester": 1, "testers": 2}
with open('mycsvfile.csv', 'wb') as f:
w = csv.DictWriter(f, my_dict.keys())
w.writerow(dict((fn,fn) for fn in my_dict.keys()))
w.writerow(my_dict)
$ cat mycsvfile.csv
testers,tester
2,1
Когда у вас есть список словарей, например, что вы получаете из запросов SQL, вы делаете это следующим образом.
my_dict = ({"tester": 1, "testers": 2},{"tester": 14, "testers": 28})
with open('mycsvfile.csv', 'wb') as f:
w = csv.DictWriter(f, my_dict[0].keys())
w.writerow(dict((fn,fn) for fn in my_dict[0].keys()))
w.writerows(my_dict)
cat mycsvfile.csv
testers,tester
2,1
28,14