[英]Create a dictionary using the row number in a csv file [Python]
我有一個包含 60 名參與者的調查數據的 CSV 文件。 第一列是參與者的編號,每個編號對應從該參與者收集的所有數據。 它看起來像:
參與者人數:1,性別:女性,學習水平:研究生
我想創建一個字典,其中鍵是參與者編號,值是包含所有數據的整個行,具有如下內容:
{1:女性,研究生,美國人,是,否,否,是,是,否...}等等。 我仍然是新手,到目前為止這是我嘗試過的:
with open('surveys.csv', 'r') as f:
reader = csv.reader(f, delimiter=' ')
with open('new_surveys.csv', mode='w') as outfile:
writer = csv.writer(outfile)
mydict = {rows[0]:rows for rows in reader}
print(mydict)
但這會打印出類似的內容:
{'\"': ['\"'], '參與者/問題","1.': ['參與者/問題","1.', '性別'], ',2.': [ ',2.', 'Level', 'of', 'study'],} 目前對我來說沒有任何意義......
謝謝!
編輯:
這是一行完整的數據:
你可以試試這個嗎?
import csv
with open('surveys.csv', 'r') as f:
reader = csv.reader(f, delimiter=' ')
mydict={}
iterreader = iter(reader)
next(iterreader)
for row in iterreader:
elementsList=row[0].split("\t")
nonEmptyElements=[]
for element in elementsList[1:]:
print(element)
if(not element.strip()==""):
nonEmptyElements.append(element)
valuesList=",".join(nonEmptyElements)
mydict[elementsList[0]]=valuesList
print(mydict)
我的 CSV 看起來像這樣
Participant Name Gender
1 Rupin Male
2 Poonam Female
3 Jeshan Male
該代碼避免使用第一行。
我的輸出看起來像這樣
{'1': 'Rupin,Male', '2': 'Poonam,Female', '3': 'Jeshan,Male'}
從注釋中,我們知道原始文件的前 100 個字節是:
b'\xef\xbb\xbf"\nParticipant/Question","1. Gender\n","2. Level of study\n","3. How often visit SC\n","4. Time of vi'
這看起來像是從 Excel 導出的 csv,在單元格中嵌入了換行符。 b'\\xef\\xbb\\xbf'
是字節序標記,表示字節被編碼為'utf-8-sig'。
根據此信息,此代碼應創建所需的字典:
with open('surveys.csv', 'r', encoding='utf-8-sig') as f:
reader = csv.reader(f, dialect='excel')
# Advance the iterator to skip the header row
next(reader)
mydict = {row[0]:row for row in reader}
print(mydict)
傳遞 'utf-8-sig' 編碼可確保字節順序標記不會被視為數據的一部分。 如果您使用 Excel,那么在讀寫 csv 文件時設置此編碼可能是個好主意。
將dialect='excel'
傳遞給讀取器會告訴它使用與 Excel 創建的 csv 文件關聯的默認值,例如使用逗號作為分隔符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.