Próbuję policzyć czasy "TMP" występuje w pliku i do jakiego pliku należy liczyć. Stworzyłem skrypt, który działa, ale muszę ustawić plik wejściowy i katalog wyjściowy dla każdego pliku. Aby poprawić go, chciałbym skrypt przejść przez każdy plik w folderze po raz pierwszy.

Eksperymentowałem z:

import tkFileDialog
import glob
import os
directory = tkFileDialog.askdirectory()
for infile in glob.glob(os.path.join(directory, "*.*")):
    open(infile, "r").read()
    infile.count("Tmp")

Obecnie liczą udział liczbę razy "TMP" występuje w nazwie pliku, a nie rzeczywisty plik, gdy wpisuję:

print infile

Wynika to zawartość plików tekstowych, ale nie w katalogu? Po prostu zdezorientowałem się, gdzie iść lub co robić.

1
Jeff 2 listopad 2011, 04:27

3 odpowiedzi

Najlepsza odpowiedź

Używałbym os.walk, a nie glob:

import tkFileDialog
import os
import os.path
import re

directory = tkFileDialog.askdirectory()

for dirpath, dirnames, filenames in os.walk(directory):
    for filename in filenames:
        path = os.path.join(dirpath, filename)

        with open(path) as file:
            contents = file.read()

            print path[:30], contents.count('Tmp'), re.findall('Tmp\d{5}', contents)
1
Zack Bloom 2 listopad 2011, 22:27

To powinno być:

data = open(infile, 'r').read()
print data.count('Tmp')
1
Raymond Hettinger 2 listopad 2011, 00:46
import os
import glob
import tkFileDialog


directory = tkFileDialog.askdirectory()        

for infile in glob.glob(os.path.join(directory, '*')):
    if os.path.isfile(infile):
        f = open(infile)
        print os.path.split(infile)[-1], f.read().count('Tmp')
0
César 2 listopad 2011, 01:25