使用os.listdir()提取文件名时解析文件出错

0 投票
1 回答
1656 浏览
提问于 2025-04-16 21:50

如果我在Windows命令行中使用 filename = argv[n],下面的 extract() 函数似乎可以正常工作。但是如果我使用 os.listdir() 函数从当前目录提取文件名,然后用这个文件名列表,extract() 函数就会出问题。

虽然 input_file.read() 能够识别文件名是有效的值,但在 date = list(date_match[0] 这一行时却出现了错误,提示 'TypeError: coercing to Unicode: need string or buffer, tuple found'。

看起来 os.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

你重新定义了 list!当你尝试执行 date = list(date_match[0]) 时,你调用的是你自己定义的 list 函数,而不是 Python 自带的 list 函数。把你自己定义的这个 list 函数改个名字,这样就可以正常工作了。

撰写回答