【问题标题】:Dynamically create lists of lists from CSV file data从 CSV 文件数据动态创建列表列表
【发布时间】:2018-04-14 04:59:04
【问题描述】:

我有一个CSV 文件,我想要reading 作为配置文件来创建listslist 来存储数据。

我的CSV文件格式为:

list_name, search_criteria  
channel1, c1  
channel2, c2  
channel3, c3

我想在CSV 文件中创建read,并从lists 数据中动态创建listlist_name,因为它会随着时间的推移而增长和缩小,我总是想要@ 中定义的任何内容987654333@ 文件。

CSV 文件中的list_name 是我要动态创建的列表名称的“前缀”。例如,从 csv 文件中读取“channel1”、“channel2”、“channel3”并创建一个列表列表,其中“mainList[]”是核心列表,其中包含 3 个名为“channel1_channel_list”、“channel2_channel_list”的列表,“channel3_cannel_list”。

我知道我的命名约定可以简化,所以请忽略。一旦我有一个可行的解决方案,我就会留下来。我将使用搜索条件来填充mainLists[] 中的列表。

这是我不完整的代码:

mainList = []

with open('list_config.csv') as input_file:
    dictReader = csv.DictReader(input_file)

    for row in dictReader:
        listName = row['list_name'] + '_channel_list'

【问题讨论】:

  • 不要创建列表列表,创建列表字典,使用键名。
  • 谢谢。我是 python 新手,不知道该怎么做。你能举个例子吗?
  • 如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。有关完整说明,请参阅here

标签: python list csv


【解决方案1】:

这是读取数据并从中创建字典的方法。

除了从文件中读取数据外,csv 读取器还可以从字符串列表中读取数据,这对于像这样的示例代码来说非常方便。对于您的数据,您需要指定 skipinitialspace=True 以跳过逗号后的空格。

import csv

data = '''\
list_name, search_criteria
channel1, c1
channel2, c2
channel3, c3
'''.splitlines()

dictReader = csv.DictReader(data, skipinitialspace=True)

main_dict = {}
for row in dictReader:
    name = row['list_name'] + '_channel_list'
    criteria = row['search_criteria']
    main_dict[name] = criteria

# Print data sorted by list_name
keys = sorted(main_dict)
for k in keys:
    print(k, main_dict[k])

输出

channel1_channel_list c1
channel2_channel_list c2
channel3_channel_list c3

此代码比 Joe Iddon 的版本稍微复杂一些,但如果每行有两个以上的条目,它会更容易适应。 OTOH,如果您每行只有两个条目,那么您可能应该使用 Joe 更简单的方法。

【讨论】:

  • +1 对于聪明的skipinitialspace,我只使用了csv module 几次,这是一个很酷的技巧(当然还有提到我 :))
【解决方案2】:

withstatement 中加载file,然后使用csv.reader 其中returnsreader object。然后可以通过将其传递给dict() 将其转换为dictionary

with open('list_config.csv') as input_file:
    dictionary = dict(csv.reader(input_file))

现在,dictionary 的内容是:

{'channel3': ' c3', 'channel1': ' c1', 'channel2': ' c2'}

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2023-03-22
    相关资源
    最近更新 更多