在for循环Python中打开目录

时间:2013-08-22 19:51:25

标签: python

我是初学程序员。

在我的Py脚本中,我需要创建一个CSV文件,其中包含子目录中多个文件的信息。当我运行我的代码时,我收到错误:FileNotFoundError: [Errno 2] No such file or directory: '1'。我打印了目录的内容,发现该目录没有读取文件的实际名称,而是用数字或字符替换它。

问题:这是典型的目录吗?因为在研究中,似乎其他人都可以使用

for file in directory:
    open(file, "r")

正确。我错过了什么吗?

我的代码:

sub_dir = datetime + "-dir"
os.mkdir(sub_dir)

with open("csv.txt", "a") as csv, open("data.txt") as data:
    csv.write("Title" + "\r")
    for x in data:
        csv.write("," + x)
    csv.write("\r" + "Data")                
    for file in sub_dir:
        csv.write(file)
        csv.write(", " + "Word1")
        csv.write(", " + "Word2")
        csv.write(", " + "Word3")
        csv.write(", " + "Word4")
        csv.write("\r")
        f = open(file, "r")
        lines = f.readlines()
        for line in lines:
            line.replace("word5=", ", ")
            line.replace("word6=", ", ")
            line.replace("word7=", ", ")
            csv.write(line)

问题:如何更改我的代码,以便file是实际的文件名?

2 个答案:

答案 0 :(得分:8)

问题在于这一行:

for file in sub_dir:

如果每次循环都print(file),那么显而易见的是:subdir是一个字符串,所以你只是逐个遍历该字符串的字符。

你可能想要的是:

for file in os.listdir(sub_dir):

the docs解释时,listdir

  

返回一个列表,其中包含path给出的目录中的条目名称。该列表按任意顺序排列。它不包括特殊条目'。'和'..'即使它们出现在目录中。

答案 1 :(得分:3)

sub_dir不是目录;它是目录的名称。

for file in sub_dir:

遍历名称中的字符。