无法处理 python 中的文件名 2
Fail to deal with the filename in python 2
我从 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('.')
到 return 一个以空字符串作为第一项的列表:
>>> '.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])):
>>> 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']
我从 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('.')
到 return 一个以空字符串作为第一项的列表:
>>> '.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])):
>>> 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']