使用os.listdir()提取文件名时解析文件出错
如果我在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
函数改个名字,这样就可以正常工作了。