Python 3.6:将CSV格式数据写入含变量文件名的CSV文件遇行拆分问题
解决CSV写入每行仅显示一个字符的问题
嘿,作为Python 3.6的新手第一次提问就碰到这种细节问题太正常啦,我来帮你搞定!
问题原因
你遇到的每行只显示一个字符的情况,大概率是因为给csv.writer.writerow()方法传入了单个字符串,而不是一个包含该行数据的可迭代对象(比如列表)。writerow()会把传入的可迭代对象里的每个元素当成一列,如果你传的是字符串,它就会把字符串拆成单个字符,每个字符占一列,看起来就像是每行只有一个字符啦。
正确的写法示例
先给你补全并修正代码,顺便用更安全的方式处理路径:
首先,记得要导入os模块(你的代码里用到了os.environ,所以必须导入),然后用os.path.join拼接路径,避免转义字符或者系统路径格式的问题:
import csv import os # 用os.path.join更安全,自动适配系统路径分隔符 variablefilename = "test_data" # 假设你的变量值是这个 filename = os.path.join(os.environ['USERPROFILE'], 'Downloads', 'Somefolder', f"{variablefilename}.csv") # 用with语句管理文件,自动关闭 with open(filename, 'w', newline='', encoding='utf-8') as myfile: writer = csv.writer(myfile) # 写入表头(如果需要) writer.writerow(["姓名", "年龄", "城市"]) # 写入单行数据:要把数据放在列表里 writer.writerow(["张三", 25, "北京"]) # 如果是单个字符串要写入一行,也要放在列表里 single_line = "这是一行完整的文本" writer.writerow([single_line])
错误写法对比(为什么会出问题)
如果你之前是这么写的,就会出现每行一个字符的情况:
# 错误示例! with open(filename, 'w', newline='') as myfile: writer = csv.writer(myfile) wrong_line = "这是错误的写法" writer.writerow(wrong_line) # 直接传字符串,会被拆成单个字符
额外小提示
- 加上
encoding='utf-8'参数,避免写入中文时出现乱码问题。 - 用
f-string(Python 3.6+支持)来拼接文件名更清晰,比如f"{variablefilename}.csv"。 - 始终用
with语句操作文件,它会自动帮你关闭文件,避免资源泄漏。
内容的提问来源于stack exchange,提问作者StrangerDanger
相关产品推荐
相关产品推荐

