Reputation: 449
I need to open a file from a different directory without using it's path while staying in the current directory.
When I execute the below code:
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=", ", ")
I get the error message FileNotFoundError: [Errno 2] No such file or directory:
because it's in a sub directory.
Question: Is there an os command I can use that will locate and open the file in sub_dir
?
Thanks! -let me know if this is a repeat, I searched and couldn't find one but may have missed it.
Upvotes: 9
Views: 40306
Reputation: 174
Code to copy files using 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)
Upvotes: -1
Reputation: 58885
You must give the full path if those files are not in the current directory:
f = open( os.path.join(sub_dir, file) )
I would not use file
as a variable name, maybe filename
, since this is used to create a file object in Python.
Upvotes: 11
Reputation: 1121416
os.listdir()
lists only the filename without a path. Prepend these with sub_dir
again:
for filename in os.listdir(sub_dir):
f = open(os.path.join(sub_dir, filename), "r")
If all you are doing is loop over the lines from the file, just loop over the file itself; using with
makes sure that the file is closed for you when done too. Last but not least, str.replace()
returns the new string value, not change the value itself, so you need to store that return value:
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=", ", ")
Upvotes: 13