如果我从Windows命令行使用filename = argv[n]
,则下面的extract()
函数似乎可以正常工作。如果我改为使用list(dir)
中的文件列表,它使用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()
答案 0 :(得分:4)
你重新定义了list
!当您尝试date = list(date_match[0])
时,您正在调用list
函数,而不是内置list
函数。重命名列表函数,它应该可以正常工作。