删除python列表中的扩展名

删除python列表中的扩展名,python,os.walk,Python,Os.walk,我有下面的代码,我希望找到某个文件夹中的所有文件(该文件夹包含.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_

我有下面的代码,我希望找到某个文件夹中的所有文件(该文件夹包含.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)
在评论之后,特别是多亏了暗影游侠,我把它改成了下面的版本,产生了同样的效果。谢谢大家!:

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]
更多关于什么的信息,但它实际上将文件名分成两部分。第一个是根,这是您想要的。

替换此行:

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.walk
(因为您在第一个循环中中断了
break
,所以实际上根本不是在遍历树)。您可以替换所有这些:

f = [] 
b = os.walk('C:\\Users\\username\\Desktop\\FOLDER')
for(dirpath, dirnames, filenames) in b:
    f.extend(filenames)
    break
在Python3.5+(或安装后使用
scandir.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
,保证您不必单独检查目录列表中的每个条目是否为文件

如果您使用的是较旧的Python,并且无法使用
scandir
软件包,那么您可以执行以下操作:

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))]

使用获取文件名时,请删除生成器表达式中的扩展名。更改:

致:

更新:当有更直接的方法执行此操作时,您似乎滥用了从目录分离文件的
os.walk
(因为您在第一个循环中中断了
break
,所以实际上根本不是在遍历树)。您可以替换所有这些:

f = [] 
b = os.walk('C:\\Users\\username\\Desktop\\FOLDER')
for(dirpath, dirnames, filenames) in b:
    f.extend(filenames)
    break
在Python3.5+(或安装后使用
scandir.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
,保证您不必单独检查目录列表中的每个条目是否为文件

如果您使用的是较旧的Python,并且无法使用
scandir
软件包,那么您可以执行以下操作:

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))]

旁注:当第一个循环后循环中断时,为什么要使用
os.walk
?如果os.path.isfile(os.path.join(r'C:\Users\username\Desktop\FOLDER)),为什么不将循环替换为
f=[x代表os.listdir(r'C:\Users\username\Desktop\FOLDER',x))
,或者如果您使用的是3.5+,则使用
os.scandir
保存每个文件
stat
f=[e.name代表os.scandir(r'C:\Users\username\Desktop\FOLDER'))如果e.is_file()]
?与您的问题(下面已经给出了答案)没有严格的关系,但您应该先打开文件,然后启动循环,而不是在循环中打开/关闭文件N次。谢谢大家。我对Python很陌生,所以我还不习惯写Python。但是这个论坛真的很有帮助:)。我会尽量落实你的意见!你能从你的问题中删除你的答案吗?如果您提出的答案与现有建议存在显著差异,您可以随时将其添加为备选答案。旁注:当循环在第一个循环后中断时,为什么要使用
os.walk
?如果os.path.isfile(os.path.join(r'C:\Users\username\Desktop\FOLDER)),为什么不将循环替换为
f=[x代表os.listdir(r'C:\Users\username\Desktop\FOLDER',x))
,或者如果您使用的是3.5+,则使用
os.scandir
保存每个文件
stat
f=[e.name代表os.scandir(r'C:\Users\username\Desktop\FOLDER'))如果e.is_file()]
?与您的问题(下面已经给出了答案)没有严格的关系,但您应该先打开文件,然后启动循环,而不是在循环中打开/关闭文件N次。谢谢大家。我对Python很陌生,所以我还不习惯写Python。但是这个论坛真的很有帮助:)。我会尽量落实你的意见!你能从你的问题中删除你的答案吗?如果你给出的答案与现有的建议有很大的不同,你可以随时添加它作为备选答案。我早该知道的。你太棒了,谢谢你的帮助!我早该知道你太棒了谢谢你的帮助!啊,非常感谢,但我首先看到了暗影游侠的答案。你的帮助也非常棒:谢谢你,但我首先看到了暗影游侠的答案。你的帮助也非常棒:D