簡體   English   中英

使用python 3代碼在CSV文件中查找特定的標頭

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM