【发布时间】:2016-04-03 21:40:45
【问题描述】:
我有一个 csv 文件,其中包含姓名和电话号码等内容。只有在我知道电话号码的情况下,我才对姓名感兴趣。
with open(phone_numbers) as f:
reader = csv.DictReader(f)
names = [record['Name'] for record in reader if record['phone']]
但我也想要相应的电话号码,我试过这个:
user_data = {}
with open(phone_numbers) as f:
reader = csv.DictReader(f)
user_data['Name'] = [record['Name'] for record in reader if record['phone']]
user_data['phone'] = [record['phone'] for record in reader if record['phone']]
但是对于第二个项目,我得到了一个空字符串,我猜record 是一个生成器,这就是为什么我可以对其进行两次迭代。
我尝试过使用元组,但只能这样工作:
user_data = {}
with open(phone_numbers) as f:
reader = csv.DictReader(f)
user_data['Name'] = [(record['Name'],record['phone']) for record in reader if record['phone']]
在这种情况下,我将两个变量 phone 和 Name 存储在 user_data['Name'] 中,这不是我想要的。
如果我试试这个:
user_data = {}
with open(phone_numbers) as f:
reader = csv.DictReader(f)
user_data['Name'],user_data['phone'] = [(record['Name'],record['phone']) for record in reader if record['phone']]
我收到以下错误:
ValueError: too many values to unpack
编辑:
这是表格的示例:
+--------+---------------+
|电话 |号码 |
+--------+---------------+
|路易斯 | 000 111 22222 |
+--------+---------------+
|保罗 | 000 222 3333 |
+--------+---------------+
|安德里亚 | |
+--------+---------------+
|豪尔赫 | 111 222 3333 |
+--------+---------------+
所以所有行都有名称,但并非所有行都有电话。
【问题讨论】:
-
尝试
zip(*)转置最后一行的列表。 -
你能澄清一下你的数据是一列还是多列,如果多列是电话号码和姓名在同一行吗?
-
我想你是说电话和名字在同一行
-
@PyNEwbie 这是多列,所有行都有名称,但并非所有行都有电话号码,这就是我使用 if record['phone']
标签: python csv list-comprehension