9

我需要从不同的目录打开一个文件,而不使用它的路径,同时停留在当前目录中。

当我执行以下代码时:

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

谢谢!- 让我知道这是否是重复的,我搜索并找不到,但可能错过了。

4

3 回答 3

13

os.listdir()列出没有路径的文件名。再次添加这些sub_dir

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

如果您所做的只是遍历文件中的行,则只需遍历文件本身;usingwith确保文件在完成后也为您关闭。最后但同样重要的是,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=", ", ")
于 2013-08-22T20:13:55.940 回答
11

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

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

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

于 2013-08-22T20:14:15.867 回答
-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)
于 2017-03-28T13:47:07.620 回答