繁体   English   中英

在python中的每个新文件名后添加一个新行

[英]Add a new line after each new file name in python

我有一个简短的 Python 脚本,它打开一个目录并将所有文件名放入一个 .txt 文件中。 我尝试了几种方法在每个文件名后添加一个新行,但不能这样做。 我还想将整个字符串转换为大写。

这是我所拥有的:

import os

#Path where the photos are stored
path1 = r"V:\DATABASES\0 Suspension\Suspensia Pictures"

#Variable to list all the files in the dorectory
file_dir = os.listdir(path1)

#Opens a new text file called Pics
newfile = open('Pics.txt','w')

#Writes lines in the file as a string
newfile.write(str(file_dir))

#Prints out all the file names
#print(file_dir)ode here

我对新行的想法是在newfile.write(str(file_dir))行之后添加print('\n') 然而,这并没有奏效。

至于大写,我不确定在哪里放置.upper()

这是当前的输出:

X01BJ0041, X01BJ0050, X01BJ0058, 
X01BJ0059, X01BJ0060,X01BJ0061,X01BJ0065

我正在寻找的输出:

X01BJ0006.JPG
X01BJ0007.JPG
X01BJ0008.JPG
X01BJ0026.JPG
X01BJ0036.JPG
X01BJ0037.JPG
X01BJ0038.JPG
X01BJ0039.JPG
X01BJ0040.JPG
X01BJ0041.JPG
X01BJ0050.JPG
X01BJ0058.JPG
X01BJ0059.JPG

感谢所有的帮助!

os.listdir()给你一个字符串列表,所以转换它的输出会给你一个看起来像字符串列表的字符串。

改为这样做:

#Writes lines in the file as a string
newfile.write('\n'.join(file_name.upper() for file_name in file_dir))

扩展其他答案,我们可以使用file.writelines()操作而不是join 可以说,这使相应的代码行更易于阅读,并允许您使用列表推导,但任何答案都可以正常工作,真的。

所以完整的脚本是:

import os

MY_DIR = r"V:\DATABASES\0 Suspension\Suspensia Pictures"
OUTPUT_FILENAME = "Pics.txt"

filenames = os.listdir(MY_DIR)
with open(OUTPUT_FILENAME, "w") as newfile:
    newfile.writelines(name.upper() + "\n" for name in filenames) # As @Daniel Walker noticed, the [] are not necessary for the list comprehension.

备注file.writelines()用词不当,因为它没有隐式添加行分隔符。 您可以创建自己的writelines()函数来解决此问题,但我想这对于当前主题来说有点过分了。 有关该主题的更多信息,请参阅此其他 StackOverflow 线程

os.listdir正在为您返回一个list ,因此,当您调用newfile.write(str(file_dir))时,它将打印 Python 对list的表示。

您应该将file_dir的元素写入文件而不是file_dir本身。 有两种方法可以做到这一点。 首先,您可以使用for循环:

for filename in file_dir:
   newfile.write(filename.upper() + '\n')

尽管您可能不在乎,但这样做的一个缺点是您将在文件末尾留下一个空白行。 这是因为最后写入的文件名末尾会有一个'\n'

在我看来,更好的解决方案是

newfile.write('\n'.join(name.upper() for name in file_dir))

这将获取您所有的文件名并将它们连接在一起,并在它们之间使用'\n' 这样,你就不会在最后得到一个空行。

附带说明一下,您应该养成使用with块(通常称为“上下文块”)来管理文件句柄的习惯:

with open('Pics.txt','w') as newfile:
    newfile.write('\n'.join(name.upper() for name in file_dir))

这样,当您离开块时,将保证关闭newfile

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM