删除列表中的扩展 python

remove extension in list python

我有以下代码,我想在某个文件夹中找到所有文件(此文件夹包含 .TIF 文件),然后将这些名称存储在一个 .txt 文件中,该文件目前有效。但是,我不想要文件夹中任何内容的扩展名。

import os, sys

f = [] 
b = os.walk('C:\Users\username\Desktop\FOLDER')
for(dirpath, dirnames, filenames) in b:
    f.extend(filenames)
    break

def save_to_file(text):
    for name in f:
        with open('C:\Users\username\Desktop\FOLDER\test2.txt', mode='wt', encoding='utf-8') as myfile:
            myfile.write('\n'.join(text))
            myfile.write('\n')

save_to_file(f)

经过评论,特别感谢ShadowRanger,我将其更改为以下效果相同。谢谢大家!:

import os

f = [e.name for e in os.scandir(r'C:\Users\user\Desktop\FOLDER') if e.is_file()]
print('Saving file...')

def save_to_file(text):
    for name in f:
        with open('C:\Users\user\Desktop\FOLDER\test5.txt', mode='wt', encoding='utf-8') as myfile:
            myfile.write('\n'.join(text))
            myfile.write('\n')

save_to_file(f)

替换此行:

f.extend(filenames)

像这样:

filenames_stripped = [os.path.splitext(file)[0] for file in filenames]
f.extend(filenames_stripped)

或更简单:

f.extend([os.path.splitext(file)[0] for file in filenames]

有关内容的更多信息 os.path.splitext 但它基本上将文件名分成两部分。第一个是根,就是你想要的。

当您使用 os.path.splitext 获取文件名时,删除生成器表达式中的扩展名。变化:

f.extend(filenames)

至:

f.extend(os.path.splitext(name)[0] for name in filenames)

更新: 看起来你在滥用 os.walk 进行文件与目录分离(因为你在第一个循环中 break,所以你'实际上根本不是在走一棵树),当有更直接的方法可以做到这一点时。您可以替换所有这些:

f = [] 
b = os.walk('C:\Users\username\Desktop\FOLDER')
for(dirpath, dirnames, filenames) in b:
    f.extend(filenames)
    break

在 Python 3.5+(或安装 the third party scandir package using scandir.scandir instead of os.scandir 后 Python 的任何版本),更简洁和更快:

f = [os.path.splitext(e.name)[0] for e in os.scandir(r'C:\Users\username\Desktop\FOLDER')
     if e.is_file()]

它描述了您真正想要的东西,并且通过使用 os.scandir,保证您不必单独 stat 目录列表中的每个条目来检查它是否是一个文件。

如果您年龄较大 Python,并且无法使用 scandir 套餐,则需支付 stat 的费用(无论如何 os.walk 都会支付在旧 Python) 上,你可以这样做:

f = [os.path.splitext(x)[0] for x in os.listdir(r'C:\Users\username\Desktop\FOLDER')
     if os.path.isfile(os.path.join(r'C:\Users\username\Desktop\FOLDER', x))]