對於Python 3.4.0如何將csv文件讀取爲「記錄」數據類型?
嘿大家, 我有一個CSV文件看起來像這樣:
string1;value1
string2;value2
string3;value3
我想要做的是讓這個CSV文件變成某種「記錄」數據類型,以便我可以例如尋找字符串X在stringbig,如果字符串X被發現,再加入+1到valueX。
什麼是最簡單的方法來編碼?
在此先感謝
對於Python 3.4.0如何將csv文件讀取爲「記錄」數據類型?
嘿大家, 我有一個CSV文件看起來像這樣:
string1;value1
string2;value2
string3;value3
我想要做的是讓這個CSV文件變成某種「記錄」數據類型,以便我可以例如尋找字符串X在stringbig,如果字符串X被發現,再加入+1到valueX。
什麼是最簡單的方法來編碼?
在此先感謝
您可以行到namedtuple
秒。這裏有一個簡單的例子:
import csv
from collections import namedtuple
Record = namedtuple('Record', ['product', 'part_number', 'category'])
mydict = defaultdict(dict)
with open('inventory.csv', 'rb') as inf:
for rec in map(Record._make, csv.reader(inf)):
print(rec.part_number)
你可以使用內置的csv
模塊和一個簡單的Python字典:
records[stringX] = records.get(stringX, 0) + 1
:
import csv
records = {}
with open('/path/to/your/file.csv','rb') as fileobj:
reader = csv.reader(fileobj, delimiter=';')
for key, value in reader:
records[key] = int(value)
然後你就可以輕鬆地做更新valueX
爲stringX
You can use DictReader for that
Name;Value
string1;0
string2;20
string3;12
import csv
with open("data.csv", 'r') as f:
r = csv.DictReader(f, delimiter=';')
for row in r:
if 'string2' in row['Name']:
row['Value'] += 1
print(row)
{'Value': 21, 'Name': 'string2'}
幾乎似乎工作,但一個錯誤:「無法轉換「int」對象隱式str - 我認爲,列「值」被讀爲一個字符串,但應該通常閱讀爲整數...任何想法?編輯:只需添加一個「行['價值'] =詮釋(行['值'])」 - 現在它的工作!非常感謝! –
@AtillaW。你有我的答案中顯示的文件結構相同嗎?你有標題在你的文件爲DictReader工作第一行應該是標題 - >名稱;值 – LetzerWille
是的,完全一樣的結構。 –