打开不同目录python中的所有文件

时间:2013-08-22 20:11:48

标签: python python-3.x

我需要在保留当前目录的同时不使用它的路径从其他目录打开文件。

当我执行以下代码时:

for file in os.listdir(sub_dir):
    f = open(file, "r")
    lines = f.readlines()
    for line in lines:
        line.replace("dst=", ", ")
        line.replace("proto=", ", ")
        line.replace("dpt=", ", ")

我收到错误消息FileNotFoundError: [Errno 2] No such file or directory:,因为它位于子目录中。

问题:我是否可以使用os命令在sub_dir找到并打开文件?

谢谢!我知道如果这是重复,我搜索并找不到一个,但可能已经错过了它。

3 个答案:

答案 0 :(得分:12)

os.listdir()仅列出 没有路径的文件名。再次使用sub_dir添加前缀:

for filename in os.listdir(sub_dir):
    f = open(os.path.join(sub_dir, filename), "r")

如果您所做的只是循环文件中的行,只需循环遍历文件本身;使用with确保文件在完成时也为您关闭。最后但并非最不重要的是,str.replace() 返回新的字符串值,而不是更改值本身,因此您需要存储该返回值:

for filename in os.listdir(sub_dir):
    with open(os.path.join(sub_dir, filename), "r") as f:
        for line in f:
            line = line.replace("dst=", ", ")
            line = line.replace("proto=", ", ")
            line = line.replace("dpt=", ", ")

答案 1 :(得分:10)

如果这些文件不在当前目录中,则必须提供完整路径:

f = open( os.path.join(sub_dir, file) )

我不会将file用作变量名,可能是filename,因为它用于在Python中创建文件对象。

答案 2 :(得分:-1)

使用shutil

复制文件的代码
import shutil
import os

source_dir = "D:\\StackOverFlow\\datasets"
dest_dir = "D:\\StackOverFlow\\test_datasets"
files = os.listdir("D:\\StackOverFlow\\datasets")

if not os.path.exists(dest_dir):
    os.makedirs(dest_dir)

for filename in files:
    if file.endswith(".txt"):
        shutil.copy(os.path.join(source_dir, filename), dest_dir)

print os.listdir(dest_dir)