经过大量的红宝石体验后开始学习python。记住这个背景:
我有一个看起来像这样的csv文件:
"abidjan","addis_ababa","adelaide","ahmedabad"
使用以下python脚本,我想将其读入列表:
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元素列表?我必须忽略一些不言而喻的事情。
答案 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