我需要在保留当前目录的同时不使用它的路径从其他目录打开文件。
当我执行以下代码时:
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
找到并打开文件?
谢谢!我知道如果这是重复,我搜索并找不到一个,但可能已经错过了它。
答案 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)