删除python列表中的扩展名
我有下面的代码,我希望找到某个文件夹中的所有文件(该文件夹包含.TIF文件),然后将这些名称存储在一个.txt文件中,该文件到目前为止都有效。但是,我不想要文件夹中任何内容的扩展删除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_
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