python_rookie
python_rookie

Reputation: 39

Python: Looping through files in a different directory and scanning data

I am having a hard time looping through files in a directory that is different from the directory where the script was written. I also ideally would want my script through go to through all files that start with sasa. There are a couple of files in the folder such as sasa.1, sasa.2 etc... as well as other files such as doc1.pdf, doc2.pdf

I use Python Version 2.7 with windows Powershell

Locations of Everything

1) Python Script Location ex: C:Users\user\python_project

2) Main_Directory ex: C:Users\user\Desktop\Data

3) Current_Working_Directory ex: C:Users\user\python_project

Main directory contains 100 folders (folder A, B, C, D etc..) Each of these folders contains many files including the sasa files of interest.

Attempts at running script

For 1 file the following works:

Script is run the following way: python script1.py

file_path = 'C:Users\user\Desktop\Data\A\sasa.1

def writing_function(file_path):
    with open(file_path) as file_object:
        lines = file_object.readlines()

for line in lines:
print(lines)

writing_function(file_path)  

However, the following does not work

Script is run the following way: python script1.py A sasa.1

import os
import sys
from os.path import join

dr = sys.argv[1]
file_name = sys.argv[2]

file_path = 'C:Users\user\Desktop\Data'
new_file_path = os.path.join(file_path, dr)
new_file_path2 = os.path.join(new_file_path, file_name)

def writing_function(paths):
    with open(paths) as file_object:
        lines = file_object.readlines()

for line in lines:
    print(line)

writing_function(new_file_path2)

I get the following error:

with open(paths) as file_object:
IO Error: [Errno 2] No such file or directory:
'C:Users\\user\\Desktop\\A\\sasa.1'

Please note right now I am just working on one file, I want to be able to loop through all of the sasa files in the folder.

Upvotes: 1

Views: 2556

Answers (3)

NichtJens
NichtJens

Reputation: 1899

No one mentioned glob so far, so: https://docs.python.org/3/library/glob.html

I think you can solve your problem using its ** magic:

If recursive is true, the pattern “**” will match any files and zero or more directories and subdirectories. If the pattern is followed by an os.sep, only directories and subdirectories match.

Upvotes: 0

En-code
En-code

Reputation: 49

Also note you can change directory location using

os.chdir(path)

Upvotes: -1

chapelo
chapelo

Reputation: 2562

It can be something in the line of:

import os
from os.path import join

def function_exec(file):
    code to execute on each file

for root, dirs, files in os.walk('path/to/your/files'): # from your argv[1]
    for f in files:
        filename = join(root, f)
        function_exec(filename)

Avoid using the variable dir. it is a python keyword. Try print(dir(os))

dir_ = argv[1] # is preferable 

Upvotes: 2

Related Questions