Проблема при разборе файлов при извлечении имен файлов os.listdir () как - PullRequest
0 голосов
/ 19 июля 2011

Если я использую filename = argv[n] из командной строки Windows, приведенная ниже функция extract() работает нормально.Если вместо этого я использую список имен файлов из list(dir), который использует встроенную функцию os.listdir() для извлечения имен файлов из рабочего каталога, то функция extract() завершается ошибкой.

Файл ввода.read () распознает имя файла как допустимое значение, но оно, похоже, завершается ошибкой при date = list(date_match[0]) с 'TypeError: приведение к Unicode: нужна строка или буфер, найден кортеж'.Значения выходного списка .listdir - это не обычные строки, а что-то другое.Есть идеи?

import sys
import re
import os

def extract(filename):

    input_file = open(filename, 'r')
    data = input_file.read() #read file line by line

    #make list of time and date
    date_match = re.findall(r'(\d+:\d+)\t(\d+/\d+/\d+)', data) #find file date and time
    date = list(date_match[0])

    #extract date tuple from list above
    return date

def list(dir):
    directoryfiles = os.listdir(dir)
    diroutput = []
    for member in directoryfiles:
        if member != sys.argv[0]:
            diroutput.append(member)
    return diroutput

def main():

    inputfiles = list(sys.argv[1])

    for filename in inputfiles:
        date = extract(filename)

if __name__ == '__main__':
    main()

1 Ответ

4 голосов
/ 19 июля 2011

Вы переопределены list!Когда вы пытаетесь выполнить date = list(date_match[0]), вы вызываете функцию list, а не встроенную функцию list.Переименуйте функцию списка, и она должна нормально работать.

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