我已经编写了几个函数来获取最新文件。该代码似乎正常运行,仅此而已,而不是从目标路径列出文件,而是从python程序所在的位置列出了文件。下面是代码:
import os
import platform
path = '/tmp/'
def newest_file(path='.'):
files = os.listdir(path)
paths = [os.path.join(path, basename) for basename in files]
if platform.system() == 'Windows':
return max(paths, key=os.path.getctime)
else:
return max(paths, key=os.path.getmtime)
def stamp(newest_file):
file_stamp = os.path.getmtime(newest_file)
return file_stamp, newest_file
def file_compare(file_stamp, file_name):
try:
with open(f'{path}stamp.txt') as f:
old_stamp = float(f.read())
if old_stamp == file_stamp:
print(f'No change: {file_name} --> {file_stamp}')
else:
print(f'New file: {file_name} --> {file_stamp}')
logger.info(f'{file_name} --> {file_stamp}')
with open(f'{path}stamp.txt', 'w') as f:
f.write(str(file_stamp))
except OSError:
with open(f'{path}stamp.txt', 'w') as f:
f.write(str(file_stamp))
if __name__ == '__main__':
newest_file = newest_file()
file_stamp = stamp(newest_file)[0]
file_name = os.path.basename(stamp(newest_file)[1])
file_compare(file_stamp, file_name)
因此,与其列出“ / tmp”中的文件,不如列出“ / opt”中的文件,即我的python代码所在的文件。 如果我使用
`path = glob.iglob('/tmp/*.txt')`
然后使用
def newest_file(path):
并从程序中删除变量“文件”和“路径”,我得到以下错误:
Traceback (most recent call last):
File "new_x20.py", line 45, in <module>
newest_file = newest_file()
TypeError: newest_file() missing 1 required positional argument: 'path'
我挠了一下头,但无法找出问题所在。请帮助我找出错误
谢谢
答案 0 :(得分:2)
尽管您将path
定义为'/tmp/'
,但实际上并没有在任何地方使用该值,因为在这里:
if __name__ == '__main__':
newest_file = newest_file()
您什么都不会传递给newest_file()
,这意味着它默认为.
,这是由您的默认kwarg指定的,该kwarg是并且应该是执行的当前目录。
当您尝试:
def newest_file(path):
那失败了,因为再次,您没有将任何内容传递给newest_file()
,现在它是一个位置arg而不是kwarg,这是必需的。