用Python将文件列表保存到文本文件中

2 投票
2 回答
1743 浏览
提问于 2025-04-18 14:53

我想要从文件名中去掉后缀,只保留文件名本身,并且用特定的字符来分割。

目录里有很多jpg格式的文件。

比如说,

A_list(B)_001.jpg

Stack_overflow_question_0.3.jpg

... 还有成百上千个文件在某个目录里

我想要的只是文件名,不带后缀,像这样:

A_list(B), 001

Stack_overflow_question, 0.3

但是用下面的代码,

import os

path = 'D:\HeadFirstPython\chapter3'
os.chdir(path)

data = open('temp.txt', 'w')

for file in os.listdir(path):
    if file.endswith('.jpg'):
        file = file.split('_')
        print(file, file=data)

data.close()

我得到的结果是这样的。

['A', 'list(B)', '001.jpg']

['Stack', 'overflow', 'question', '0.3.jpg']

这样可以用更少的代码来实现吗?

谢谢,祝好,
Tim

2 个回答

0

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个功能时遇到错误,或者发现某个操作没有按照预期的方式工作。

在这种情况下,查看其他人的经验和解决方案就显得特别重要。很多时候,其他开发者在遇到类似问题时,已经在网上分享了他们的解决办法。这就是为什么像StackOverflow这样的网站非常有用,因为你可以找到很多关于编程问题的讨论和解答。

如果你在学习编程,遇到问题时不要气馁,试着去搜索一下,看看有没有人遇到过类似的情况,或者有没有解决方案可以参考。记住,编程是一个不断学习和解决问题的过程,大家都是从小白一步步成长起来的。

if file.endswith('.jpg'):
        file = file.rsplit('_',1)
        print file[0],
        print file[1].rsplit('.',1)[0]
        print(file, file=data)
1
import glob
import os

path = 'D:\HeadFirstPython\chapter3'
os.chdir(path)
with open("temp.txt","w") as f: # with automatically closes your files
   my_l = [x.replace(".jpg","").rsplit("_",1) for x in glob.glob("*.jpg")] # list of lists



with open("temp.txt", "w") as f:
    for x in glob.glob("*.jpg"):
        print x.replace(".jpg", "").rsplit("_", 1) # each list 

输出的结果会是这样的:

s = "Stack_overflow_question_0.3.jpg"

print s.replace(".jpg", "").rsplit("_", 1)
['Stack_overflow_question', '0.3']

如果想把内容写入txt文件而不加","的话,可以这样做:

with open("temp.txt", "w") as f:  # with automatically closes your files
    my_l = [x.replace(".jpg", "").rsplit("_", 1) for x in glob.glob("*.jpg")]
    for l in my_l:
        f.write(str(l).replace(",", ""))

使用"*.jpg"可以找到所有以jpg结尾的文件。rsplit("_",1)这个方法会从右边开始找第一个_并进行分割,而1表示只分割一次。我们只需要用str.replace来替换文件的扩展名。

撰写回答