鱼C论坛

 找回密码
 立即注册
查看: 1026|回复: 18

[已解决]关于如何用os.path获得每个文件(夹)的名称及拓展名

[复制链接]
发表于 2020-6-6 13:51:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Nmbh 于 2020-6-6 15:05 编辑

我想使用os.listdir和os.path.splitext获得当前目录文件(夹)的文件名及拓展名,并保存到列表中。
我想把文件夹在列表中的拓展名“”改为“文件夹”,用了三元操作符‘“exten = "文件夹" if (exten == "")”,但结果出错了,请大神解答
f = os.listdir()
content = []
for each in f:
   [name,exten] = os.path.splitext(each)
   exten = "文件夹" if (exten == "")
   content.append([name,exten])
最佳答案
2020-6-6 15:33:35
Nmbh 发表于 2020-6-6 15:27
不是,我是想在得到一个[文件名,文件后缀]的列表,比如test.txt就是[test,txt],文件夹test就是[test,“ ...

xxx  if <条件> else yyy

条件满足 返回 xxx  

条件不满足 返回 yyy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-6 13:57:24 | 显示全部楼层
f = os.listdir()
content = []
for each in f:
   [name,exten] = os.path.splitext('A')
   exten = "文件夹" 
   if exten == "":
       content.append([name,exten])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 13:59:04 | 显示全部楼层
测试.....(刚才被审了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 14:02:39 | 显示全部楼层

我想把文件夹在列表中的拓展名“”改为“文件夹


看不懂 能重新叙述下不?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 15:11:22 | 显示全部楼层
Twilight6 发表于 2020-6-6 14:02
看不懂 能重新叙述下不?

就是我想把当前目录中的文件(包含文件夹)的文件名和后缀分开了保存成列表[文件名,后缀]。我使用os.listdir获得一个包含所有文件的列表f,并通过代码03-04获得每个文件的列表[文件名,后缀],由于文件夹是没有后缀名的,在列表中的后缀名为“”,我想手动把文件夹的后缀名改为“文件夹”,就用了代码05的三元操作符表达,结果发现加上这一语句后就错误了,请大神解答一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 15:15:19 | 显示全部楼层
Nmbh 发表于 2020-6-6 15:11
就是我想把当前目录中的文件(包含文件夹)的文件名和后缀分开了保存成列表[文件名,后缀]。我使用os.lis ...

你想把后缀名当文件名?是吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 15:27:57 | 显示全部楼层
Twilight6 发表于 2020-6-6 15:15
你想把后缀名当文件名?是吧?

不是,我是想在得到一个[文件名,文件后缀]的列表,比如test.txt就是[test,txt],文件夹test就是[test,“”]。
因为文件夹没有后缀,我想手动把文件夹的列表[test,""]改成[test,“文件夹”]。
我1L的代码里我为了图方面把05行代码写成三元操作符的形式结果报错了,我在下面代码中改成if else的语句又好了,想请教一下大神如果写三元操作符该怎么写。
f = os.listdir()
content = []
for each in f:
   [name,exten] = os.path.splitext(each)
   # exten = '文件夹' if exten == ""
   if exten == "":
       exten = "文件夹" 
   content.append([name,exten])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 15:33:35 | 显示全部楼层    本楼为最佳答案   
Nmbh 发表于 2020-6-6 15:27
不是,我是想在得到一个[文件名,文件后缀]的列表,比如test.txt就是[test,txt],文件夹test就是[test,“ ...

xxx  if <条件> else yyy

条件满足 返回 xxx  

条件不满足 返回 yyy
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 15:36:32 | 显示全部楼层
Nmbh 发表于 2020-6-6 15:27
不是,我是想在得到一个[文件名,文件后缀]的列表,比如test.txt就是[test,txt],文件夹test就是[test,“ ...

你这里没写 不满足条件的结果 ...就不用三元运算符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 15:42:15 | 显示全部楼层
Twilight6 发表于 2020-6-6 15:36
你这里没写 不满足条件的结果 ...就不用三元运算符

多谢指点,我只想替换给文件夹加上“文件夹”的后缀,不想改变其他后缀,我就写了"else pass",结果还是出错了。
我想问下大神如果我else里不想执行任何东西该怎么写代码?
os.chdir('E:\\')
f = os.listdir()
content = []
for each in f:
   [name,exten] = os.path.splitext(each)
   exten = '文件夹' if exten == "" else pass
#  if exten == "":
#     exten = "文件夹" 
   content.append([name,exten])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 15:47:42 | 显示全部楼层
Nmbh 发表于 2020-6-6 15:42
多谢指点,我只想替换给文件夹加上“文件夹”的后缀,不想改变其他后缀,我就写了"else pass",结果还是出 ...

因为你 exten 总不能反之 等于pass吧....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 15:52:11 | 显示全部楼层
Twilight6 发表于 2020-6-6 15:47
因为你 exten 总不能反之 等于pass吧....

大神,请问该怎么写才能实现类似于pass的效果而不是赋值?
#  if exten == "":
#     exten = "文件夹"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 15:54:10 | 显示全部楼层
Nmbh 发表于 2020-6-6 15:52
大神,请问该怎么写才能实现类似于pass的效果而不是赋值?

为什么一定要用我有点搞不明白...简单的一个if完全不需要用三元运算符简单搞复杂是吗?
if exten == "":exten = '文件夹'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 16:05:32 | 显示全部楼层
我不知道你是不是这个意思
import os

path = r'E:\Data_storage\PyCharm'
file_list = os.listdir(path)
for each in file_list:
    name, exten = os.path.splitext(each)
    exten = '文件夹' if exten == '' else exten.replace('.', '')
    print(name, exten)
这是我运行的结果
Built-in Functions png
douyu py
learn 文件夹
real-url-master 文件夹
something txt
something2 txt
列表内置方法 png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-6 16:06:17 | 显示全部楼层
March2615 发表于 2020-6-6 16:05
我不知道你是不是这个意思

这是我运行的结果

。。。你晚了几秒 不然最佳可能就是你的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 16:18:28 | 显示全部楼层
March2615 发表于 2020-6-6 16:05
我不知道你是不是这个意思

这是我运行的结果

是的,谢谢解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 16:21:23 | 显示全部楼层
Twilight6 发表于 2020-6-6 15:54
为什么一定要用我有点搞不明白...简单的一个if完全不需要用三元运算符简单搞复杂是吗?

主要是我有用过stata实现相似的字符串替换,但是习惯不写else了,就钻了下牛角尖。
replace exten = "" if exten == ""
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 20:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表