[英]Find a specific header in a CSV file using python 3 code
現在,我有Python 3代碼,該代碼在CSV文件中獲取一列數據,根據空格將每個單元格中的短語分隔為單個單詞,然后將數據導出回新的CSV文件中。
我想知道的是,是否有辦法告訴python僅將格式設置代碼應用於具有特定標題的特定列?
這是我的源數據的樣子
Keyword Source Number
Lions Tigers Bears US 3
Dogs Zebra Canada 5
Sharks Guppies US 2
這是我的代碼,它基於空格將每個單元格中的短語分隔為單個單詞
with open(b'C:\Users\jk\Desktop\helloworld.csv', 'r') as datafile:
data = []
for row in datafile:
data.extend(item.strip() for item in row.split())
with open('test.csv', 'w') as a_file:
for result in data:
result = ''.join(result)
a_file.write(result + '\n')
print(result)
這樣源數據就變成了
Keywords Source Number
Lions US 3
Tigers
Bears
Dogs Canada 5
等等
在這種情況下,我只需要將所有這些代碼應用於標題為Keyword
的一列即可。 理想情況下,我想做的是還將“來源”和“編號”中的數據擴展到這些新創建的行(Lions US 3-Tigers US 3-Bears US 3等),但是我並沒有真正想通了那部分呢!
我在論壇上閑逛了一段時間,試圖找到答案,我知道您可以告訴python讀取放置headers = file.readline()
的CSV文件的第一行( headers = file.readline()
),但除此之外,我還是丟失。 使用CSV閱讀器會更容易嗎?
使用csv
模塊將數據分成幾列。 使用csv.DictReader()
對象可以更輕松地通過標題選擇列:
import csv
source = r'C:\Users\jk\Desktop\helloworld.csv'
dest = 'test.csv'
with open(source, newline='') as inf, open(dest, 'w', newline='') as outf:
reader = csv.DictReader(inf)
writer = csv.DictWriter(outf, fieldnames=reader.fieldnames)
for row in reader:
words = row['Keyword'].split()
row['Keyword'] = words[0]
writer.writerow(row)
writer.writerows({'Keyword': w} for w in words[1:])
DictReader()
將從文件中讀取第一行,並將其用作每一行生成的詞典的鍵; 所以一行看起來像:
{'Keyword': 'Lions Tigers Bears', 'Source': 'US', 'Number': '3'}
現在,您可以分別尋址每個列,並僅使用Keyword
列的第一個單詞更新字典,然后為其余單詞生成其他行。
我在這里假設您的文件以逗號分隔。 如果需要其他定界符,則將delimiter
參數設置為該字符:
reader = csv.DictReader(inf, delimiter='\t')
以制表符分隔的格式。 有關各種選項,請參見模塊文檔,包括稱為方言的預定義格式組合。
演示:
>>> import sys
>>> import csv
>>> from io import StringIO
>>> sample = StringIO('''\
... Keyword,Source,Number
... Lions Tigers Bears,US,3
... Dogs Zebra,Canada,5
... Sharks Guppies,US,2
... ''')
>>> output = StringIO()
>>> reader = csv.DictReader(sample)
>>> writer = csv.DictWriter(output, fieldnames=reader.fieldnames)
>>> for row in reader:
... words = row['Keyword'].split()
... row['Keyword'] = words[0]
... writer.writerow(row)
... writer.writerows({'Keyword': w} for w in words[1:])
...
12
15
13
>>> print(output.getvalue())
Lions,US,3
Tigers,,
Bears,,
Dogs,Canada,5
Zebras,,
Sharks,US,2
Guppies,,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.