
本文旨在解决将 Python 列表数据正确保存到 CSV 文件时遇到的问题,特别是当列表中的每个元素被错误地写入 CSV 文件的单独列时。我们将探讨 csv 模块的使用,并提供代码示例,确保列表中的每个元素作为 CSV 文件中的单独行写入。
在使用 Python 的 csv 模块将列表数据保存到 CSV 文件时,常见的一个问题是 writerows 方法会将字符串视为字符序列,从而将每个字符写入单独的列。 解决这个问题,需要理解 writerows 方法的正确使用方式,并进行适当的数据格式转换。
正确使用 csv.writerows() 方法
csv.writerows() 方法期望接收一个可迭代对象,其中每个元素都是一个表示 CSV 文件中一行的列表或元组。 当直接将字符串列表传递给 writerows() 时,它会将每个字符串视为字符列表,导致每个字符被写入单独的列。
立即学习“Python免费学习笔记(深入)”;
解决方案:将每个元素包装在列表中
要解决这个问题,需要将列表中的每个元素(字符串)包装在一个新的列表中。 这告诉 writerows() 方法将每个字符串视为一个完整的行,而不是一系列字符。
以下是一个示例代码:
import csv
links = ['https://www.portalinmobiliario.com/MLC-2150551226-departamento-los-talaveras-id-117671-_JM#position=1&search_layout=grid&type=item&tracking_id=01bab66e-7cd3-43ce-b3d7-8389260b443d',
'https://www.portalinmobiliario.com/MLC-2148268902-departamento-los-espinos-id-116373-_JM#position=2&search_layout=grid&type=item&tracking_id=01bab66e-7cd3-43ce-b3d7-8389260b443d']
with open('links.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows([link] for link in links) # 使用生成器表达式
代码解释:
- import csv: 导入 csv 模块,以便使用其功能。
- links = [...]: 定义一个包含链接的列表。
- with open('links.csv', 'w', newline='') as f:: 打开一个名为 links.csv 的文件以进行写入 ('w')。 newline='' 参数用于防止在 Windows 系统上出现额外的空行。
- writer = csv.writer(f): 创建一个 csv.writer 对象,该对象将用于将数据写入文件。
- writer.writerows([link] for link in links): 这是关键部分。 [link] for link in links 是一个生成器表达式,它迭代 links 列表,并将每个 link 包装在一个新的列表中 [link]。 writerows() 方法接收这个生成器表达式的结果,并将每个 link 作为 CSV 文件中的单独一行写入。
使用 writerow() 方法的替代方案
除了使用 writerows() 方法和生成器表达式外,还可以使用 writerow() 方法来逐行写入数据。 这种方法可能更易于理解,特别是对于初学者。
import csv
links = ['https://www.portalinmobiliario.com/MLC-2150551226-departamento-los-talaveras-id-117671-_JM#position=1&search_layout=grid&type=item&tracking_id=01bab66e-7cd3-43ce-b3d7-8389260b443d',
'https://www.portalinmobiliario.com/MLC-2148268902-departamento-los-espinos-id-116373-_JM#position=2&search_layout=grid&type=item&tracking_id=01bab66e-7cd3-43ce-b3d7-8389260b443d']
with open('links.csv', 'w', newline='') as f:
writer = csv.writer(f)
for link in links:
writer.writerow([link]) # 将每个链接包装在列表中
在这个版本中,我们使用一个 for 循环来迭代 links 列表,并使用 writerow([link]) 将每个链接作为单独的一行写入 CSV 文件。 同样,重要的是将每个链接包装在一个列表中。
注意事项:
-
文件编码: 根据需要,可以指定文件的编码方式。 例如,使用 encoding='utf-8' 可以确保正确处理 Unicode 字符。
with open('links.csv', 'w', newline='', encoding='utf-8') as f: # ... -
分隔符和引用符: csv.writer 允许自定义分隔符(默认为逗号)和引用符(默认为双引号)。 可以使用 delimiter 和 quotechar 参数进行设置。
writer = csv.writer(f, delimiter=';', quotechar='"')
总结:
将 Python 列表保存到 CSV 文件时,理解 csv.writerows() 和 csv.writerow() 方法的正确使用方式至关重要。 通过将列表中的每个元素包装在一个新的列表中,可以确保每个元素作为 CSV 文件中的单独一行写入,从而避免将字符串拆分为单独的字符列。 此外,注意文件编码和分隔符/引用符的设置,以满足特定的数据格式要求。










