перебирать файлы в каталоге - PullRequest
0 голосов
/ 07 марта 2012

Мой код должен получить последний измененный файл и распечатать его на экране, пока он продолжает работать, пока не будет изменен новый файл, и он напечатает его на экране, но я продолжаю получать ошибку типа. Ошибка типа: приведение к Unicode: требуется строка или буфер, int найдено.

import os, sys, re, time
from datetime import date, timedelta, datetime
from time import localtime

files = os.listdir('dir_path')

files = [f for f in files if re.search('.csv', f, re.I)]
files.sort

d = datetime.now() - timedelta(days = 30)
d = d.timetuple()

oldfiles = 0
newfiles = 0
for file in files:
    filetimesecs = os.path.getmtime('dir_path' + file)
    filetime = localtime(filetimesecs)

if filetime < d:
    oldfiles += 1
if filetime > d:
    newfiles += open(files, 'r')
    for k in newfiles:
        sys.stderr.write(k)
    while True:
        time.sleep(2)
        print"new: %s" % newfiles

Ответы [ 2 ]

1 голос
/ 07 марта 2012

Похоже, у нас есть несколько ошибок типа, я постараюсь исправить это как можно лучше.

oldfiles = 0
# if newfiles is an integer, I'm not sure that it will be
# as helpful to you, I think you'd really rather have a list
newfiles = list()
for file in files:
    filetimesecs = os.path.getmtime('C:/tmp/' + file)
    filetime = localtime(filetimesecs)
    if filetime < d:
        oldfiles += 1
    if filetime > d:
        newfiles.append(open('C:/tmp/' + file, 'r'))
        for k in newfiles:
            # read the entire file and write it to standard error
            sys.stderr.write(k.read())

# I believe you want the while out here, after everything is complete
# it would seem that you would want the newfiles loop within the first
# for loop
while True:
    time.sleep(2)
    print "new: %s" % newfiles

Надеюсь, это имело какое-то значение.

1 голос
/ 07 марта 2012

В вашем коде есть несколько вещей, которые выглядят странно.Например:

files = [f for f in files if re.search('.csv', f, re.I)]

Это действительно то, что вы хотите?Точка соответствует любому символу, кроме новой строки.Вам, вероятно, нужно избежать его, чтобы получить желаемое поведение, или вы можете просто протестировать с помощью f.endswith('.csv').

files.sort

Это не вызов функции.Это должно быть files.sort()

filetimesecs = os.path.getmtime('dir_path' + file)

Лучше использовать os.path.join() для объединения путей и имен каталогов.

newfiles += open(files, 'r')

Переменная files представляет собой список, а нестрока, верно?Вы не получили ошибку в этой строке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...