使用python 3代码查找CSV文件中的特定标题

2 人关注

现在,我有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的那一列。 理想情况下,我想做的是将在 "来源 "和 "编号 "中发现的数据也扩展到这些新创建的行(狮子队US 3--老虎队US 3--熊队US 3等),但我还没有真正弄清楚这一部分

我一直在论坛上寻找答案,我知道你可以告诉python读取CSV文件中第一行的标题(headers = file.readline()),但除此之外我就迷茫了。 使用CSV阅读器会不会更容易一些?

5 个评论
你的列是用标签分开的吗?
嗨,Martijn -- 文件是CSV格式的,所以我不相信。
The C stands for 角色 逗号和制表符都是常见的。那我就假设你有逗号分隔的数据;你的样本数据并没有给出什么提示。
@MartijnPieters 逗号分隔的,没有逗号的? :)
@JonClements:很多人把CSV加载到Excel中,然后显示其中的结果,而不是实际的文件内容。
python
csv
user3682157
user3682157
发布于 2014-08-16
1 个回答
Martijn Pieters
Martijn Pieters
发布于 2014-08-16
已采纳
0 人赞同

Use the csv module 来将你的数据分成几列。使用 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:])

替换代码3】将从你的文件中读取第一行,并将其作为为每一行产生的字典的键;因此,一行看起来像。

{'Keyword': 'Lions Tigers Bears', 'Source': 'US', 'Number': '3'}

现在你可以单独处理每一列,只用Keyword列的第一个词来更新字典,然后再为其余的词产生额外的行。

我在这里假设你的文件是逗号分开。如果需要一个不同的分隔符,那么将delimiter参数设置为该字符。

reader = csv.DictReader(inf, delimiter='\t')

为制表符分隔的格式。有关各种选项,包括预定义的格式组合,请参见模块文档,称为方言.

Demo:

>>> 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:])
>>> print(output.getvalue())
Lions,US,3
Tigers,,
Bears,,