我正在尝试删除数组中每个文件名中找到的扩展名。
我有
files = ['file.tsv', 'file2.tsv', 'file3.tsv']
并希望输出为
files = ['file', 'file2', 'file3']
如何在阵列上执行此功能?
答案 0 :(得分:3)
您可能希望使用现有列表进行列表理解:
import os
no_extensions = [os.path.splitext(file_name)[0] for file_name in files]
您应该使用os.path.splitext
而不是file_name.split('.')
,因为如果您的文件名中间有一个句点(例如"file.partial.dat"
将失败并显示file_name.split('.')
),它也会有效/ p>
答案 1 :(得分:0)
print str(files).replace(".tsv","")
可能不是你老师想要的,但它会看起来正确; P
答案 2 :(得分:0)
import re
pat = re.compile(r'\.')
['.'.join(pat.split(k)[:-1]) for k in files]
答案 3 :(得分:0)
无论扩展名是什么,这都是一般的方法。
fileNames = [s.split('.')[0] for s in files]
它创建一个新列表并保持原始列表不变。
编辑:
如果你的名字中有点(比如file.tsv.zip),还有一种方法可以做到而不用导入:
fileNames = ['.'.join(s.split('.')[:-1]) for s in files]
如果你还想支持NO扩展名的文件,那么最好使用这个:
fileNames = [s if s.find('.')==-1 else '.'.join(s.split('.')[:-1]) for s in files]
(好吧它虽然有点脏:P)
所以最后一个给出:
>> files = ['file.tsv', 'file2.tsv.zip', 'file3']
>> fileNames
['file', 'file2.tsv', 'file3']
答案 4 :(得分:-1)
我愿意......
Files = [n.split()[0] for n in files]