为什么csv阅读器创建一个嵌套列表?

时间:2016-11-30 13:04:54

标签: python csv

经过大量的红宝石体验后开始学习python。记住这个背景:

我有一个看起来像这样的csv文件:

city_names.csv

"abidjan","addis_ababa","adelaide","ahmedabad"

使用以下python脚本,我想将其读入列表:

city_names_reader.py

import csv

city_name_file = r"./city_names.csv"

with open(city_name_file, 'rb') as file:
  reader = csv.reader(file)
  city_name_list = list(reader)

print city_name_list

结果让我感到惊讶:     [['abidjan', 'addis_ababa', 'adelaide', 'ahmedabad']]

知道我为什么要获得嵌套列表而不是4元素列表?我必须忽略一些不言而喻的事情。

3 个答案:

答案 0 :(得分:3)

CSV文件表示数据表。表包含列和行,如电子表格。 CSV文件中的每一行都是表格中的一行。一行包含多个列,以,

分隔

当您阅读CSV文件时,您会获得一个行列表。每行都是一列。

如果您的文件只有一行,您可以轻松地从列表中读取该行:

city_name_list = city_name_list[0]

通常每列代表某种数据(想想“电子邮件地址列”)。然后每行代表一个不同的对象(想想“每行一个对象,每行可以有一个电子邮件地址”)。您可以通过添加更多行来向表中添加更多对象。

宽表不常见。宽表是通过添加更多列而不是行来增长的表。在您的情况下,您只有一种数据:城市名称。所以你应该有一个列(“名称”),每个 city 一行。要从文件中获取城市名称,您可以从每行读取第一个元素:

city_name_list = [row[0] for row in city_name_list]

在这两种情况下,您都可以使用itertools.chain

展平列表
city_name_list = itertools.chain(city_name_list)

答案 1 :(得分:1)

正如其他人所说,您的文件不是惯用的CSV文件。你可以这样做:

with open(city_name_file, "rb") as fp:
    city_names_list = fp.read().split(",")

答案 2 :(得分:0)

根据评论,这是一个可能的解决方案:

import csv

city_name_file = r"./city_names.csv"
city_name_list = []

with open(city_name_file, 'rb') as file:
  reader = csv.reader(file)
  for item in reader:
    city_name_list += item

print city_name_list