gpt4 book ai didi

python - 无法处理 python 2 中的文件名

转载 作者:行者123 更新时间:2023-11-28 19:14:26 25 4
gpt4 key购买 nike

我从 github 上克隆了某人的代码并尝试运行它但失败了。错误指向这个函数:

# processing files in a directory
# return {b:'d:f d:f ...', ...}
def proc_dir(dwid_dir):
bf = defaultdict(str)
for fname in sorted(os.listdir(dwid_dir), key=lambda d:int(d.split('.')[0])):
day_bf = bitermFreq(dwid_dir + fname)
for b, f in day_bf.items():
bf[b] += '%s:%d ' % (fname.split('.')[0], f)

return bf

具体来说,这行代码:

for fname in sorted(os.listdir(dwid_dir), key=lambda d:int(d.split('.')[0])):

该目录中所有文件的名称格式如下:{int number}.txt。例如,0.txt

但是,它出现了一个错误:

Traceback (most recent call last):


File "bitermDayFreq.py", line 11, in proc_dir
for fname in sorted(os.listdir(dwid_dir), key=lambda d:int(d.split('.')[0])):
File "bitermDayFreq.py", line 11, in <lambda>
for fname in sorted(os.listdir(dwid_dir), key=lambda d:int(d.split('.')[0])):
ValueError: invalid literal for int() with base 10: ''

作者告诉我他可以成功运行这段代码。我想知道这是否与编码问题有关。以及如何解决?提前谢谢你。

最佳答案

有一个带有前导点 (.) 的文件,它导致 d.split('.') 返回一个列表,其中第一项为空字符串:

>>> '.hidden'.split('.')
['', 'hidden']

要跳过带前导点的文件(UNIX 中的隐藏文件),请替换以下行:

for fname in sorted(os.listdir(dwid_dir), key=lambda d:int(d.split('.')[0])):

与:

for fname in sorted([fn for fn in os.listdir(dwid_dir) if not fn.startswith('.')],
key=lambda d:int(d.split('.')[0])):

使用 list comprehension .


>>> filenames = ['.hidden', '12.txt', '2.txt']
>>> sorted([fn for fn in filenames if not fn.startswith('.')],
key=lambda d:int(d.split('.')[0]))
['2.txt', '12.txt']

关于python - 无法处理 python 2 中的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35425016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com