Running a python script on all the files in a directory

前端 未结 4 687
有刺的猬
有刺的猬 2020-12-19 07:45

I have a Python script that reads through a text csv file and creates a playlist file. However I can only do one at a time, like:

python playlist.py foo.csv          


        
相关标签:
4条回答
  • 2020-12-19 07:56

    Is it a single directory, or nested?

    Ex.

    topfile.csv
    topdir
       --dir1
           --file1.csv
           --file2.txt
           --dir2
               --file3.csv
               --file4.csv
    

    For nested, you can use os.walk(topdir) to get all the files and dirs recursively within a directory.

    You could set up your script to accept dirs or files:

    python playlist.py topfile.csv topdir

    import sys
    import os
    
    def main():
        files_toprocess = set()
        paths = sys.argv[1:]
        for p in paths:
            if os.path.isfile(p) and p.endswith('.csv'):
                files_toprocess.add(p)
            elif os.path.isdir(p):
                for root, dirs, files in os.walk(p):
                    files_toprocess.update([os.path.join(root, f) 
                                            for f in files if f.endswith('.csv')])
    
    0 讨论(0)
  • 2020-12-19 08:03

    Just use a for loop with the asterisk glob, making sure you quote things appropriately for spaces in filenames

    for file in *.csv; do
       python playlist.py "$file" >> outputfile.txt;
    done
    
    0 讨论(0)
  • 2020-12-19 08:07

    if you have directory name you can use os.listdir

    os.listdir(dirname)
    

    if you want to select only a certain type of file, e.g., only csv file you could use glob module.

    0 讨论(0)
  • 2020-12-19 08:13
    for f in *.csv; do
      python playlist.py "$f" "${f%.csv}list.txt"
    done
    

    Will that do the trick? This will put foo.csv in foolist.txt and abc.csv in abclist.txt.

    Or do you want them all in the same file?

    0 讨论(0)
提交回复
热议问题