如果我从windows命令行使用filename = argv[n],下面的extract()函数似乎工作正常。如果我使用list(dir)中的文件名列表(使用os.listdir()内置函数从工作目录中提取文件名),那么extract()函数将失败。提取文件名时解析文件的问题os.listdir()为
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
更改“列表”功能的名称后再试一次。 'list'是一个内置的python,你不应该重写这个名字。 –
+0
你是什么意思,“它似乎os.listdir输出列表值不是正常的字符串,但别的东西”,你是否尝试打印值,打印那里类型例如'print dir,type(dir)',btw'dir'是一个内置命令,不用它作为变量名 –
+0
如果你只取得第一个结果,也没有理由使用're.findall()'。只需要执行'date_match = re.search(r'(\ d +:\ d +)\ t(\ d +/\ d +/\ d +)',data); date = filelist(date_match.group ())',其中'filelist'是你的'list'函数的一个更正的名字(因为'list'是一个Python内建的,不应该像这样被映射)。 (或者,如果你想在那里使用内建'list',只需重命名你的'list'函数并保持'list'的使用。) –