【问题标题】:Why is my code resulting in a horizontal list instead of a vertical one?为什么我的代码会生成水平列表而不是垂直列表?
【发布时间】:2019-05-06 23:23:42
【问题描述】:

我正在编写一个脚本来从目录中提取所有文件名,修改名称,然后将名称输出到 Excel 文件。截至目前,我只是专注于将文件名列表输出到 .csv 文件,当我这样做时,文件名出现在水平列表中,每列中有一个项目,而不是垂直列表,标题下每行中的一项。

我尝试使用 writer.writerow(files) 和 for i in files: writer.writerow(i)。第一个给了我当前的水平输出,而第二个将每个字符水平分解成一个新单元格,同时垂直写入列表。

import os
import csv

path = "C:\\Users\\[REST OF PATH]\\"

files = []
csv_filename = "python_list_test.csv"

#r = root, d = directory, f = files

''' * for r,d,f, in os.walk(path):
    for file in f:
        if '.txt' in file:
            files.append(os.path.join(r,file))
for f in files:
    print(f)
'''

for r,d,f in os.walk(path):
    for name in f:
        if '.pdf' in name:
            files.append(name)

for i in files:
    print(i)

with open(csv_filename, mode='w',newline='') as c:
    writer = csv.writer(c)
    writer.writerow(['File Name',])

    writer.writerow(files)

我希望代码能给我一个单列列表,每一行都是下一个项目。当我打印前面提到的第二种方法时(for i in files:...),它看起来很完美,但写入 .csv 文件时会分离出字符。

【问题讨论】:

    标签: python csv


    【解决方案1】:

    只需要改变最后一行:

    writer.writerows([f] for f in files)
    

    【讨论】:

    • 真的吗?哈哈。让我试试。我刚刚测试了将其更改为这个,它也可以正常工作。 python for i in files: writer.writerow([i]) 哪种方法更好?
    • 哦,那没用。它回到将每个字符水平写入单个单元格。
    • 实际上在 Python 2.7 中没有什么不同。然而在 Python 3 中,csv 模块部分用 C 重写,因此使用 writerows 可以给你一点提升。
    • @dnlarralde:哦,我忘了把字符串转换成列表。
    • 哦,明白了。这样看起来更整洁。我喜欢。我想知道为什么在 Pycharm 建议中没有将 writerows 作为选项显示出来。
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多