Python 定义文件名并在各种循环和函数中调用文件名

Python 定义文件名并在各种循环和函数中调用文件名,python,numpy,python-imaging-library,Python,Numpy,Python Imaging Library,简而言之,我已经编写了一段代码,可以打开一个文件并对其进行一些修改。但是,当我想打开一个新文件时,我不想继续浏览我的脚本并重命名所有文件 我正在考虑尽早设置一个定义文件名的变量,即 A=filename('png1.png') B=filename('png2.png') 然而,我不太知道如何实现这一点。这是我当前的代码: import os from os import path import numpy as np from PIL import Image from wordcloud

简而言之,我已经编写了一段代码,可以打开一个文件并对其进行一些修改。但是,当我想打开一个新文件时,我不想继续浏览我的脚本并重命名所有文件

我正在考虑尽早设置一个定义文件名的变量,即

A=filename('png1.png')
B=filename('png2.png')
然而,我不太知道如何实现这一点。这是我当前的代码:

import os

from os import path
import numpy as np
from PIL import Image
from wordcloud import WordCloud, STOPWORDS

#d=path.dirname(_file_) if "_file_" in locals() else os.getcwd()
os.chdir('C:/Users/Sams PC/Desktop/Word_Cloud_Scripts/Dmitrys Papers/Word_Cloud_Dmitry')
Document=open('Dmitry_all_lower.txt', 'r', encoding='utf-8')
text=Document.read()

heart_mask=np.array(Image.open("**png1.png**"))
print (heart_mask)
split= str('**png1.png**').rsplit('.')
extension=split[len(split)-1]
if extension == "png":
    image = Image.open("**png1.png**")
    image.convert("RGBA") # Convert this to RGBA if possible

    canvas = Image.new('RGBA', image.size, (255,255,255,255)) # Empty canvas colour (r,g,b,a)
    canvas.paste(image, mask=image) # Paste the image onto the canvas, using it's alpha channel as mask
    #canvas.thumbnail([width, height], Image.ANTIALIAS)
    canvas.save('**png2.png**')

    from wand.image import Image

    with Image(filename='**png2.png**') as img:
        img.format='jpeg'
        img.save(filename='**png1.jpg**')
    from PIL import Image
    heart_mask=np.array(Image.open("**png1.jpg**"))
else:
    print ('')


print (heart_mask)
stopwords=set(STOPWORDS)
stopwords.update(["will", "us","protein","residue", "interaction","residues","using","proteins","thus","fig"])
wc= WordCloud(stopwords=stopwords, background_color="white",max_words=1000, mask=heart_mask, contour_width=3, contour_color='black')
print ('Generating Word Cloud')

wc.generate(text)
wc.to_file("Dmitry3.png")

import matplotlib.pyplot as plt
plt.figure()
plt.imshow(wc,interpolation="bilinear")
plt.axis("off")
print ('Generation Done')
plt.show()
我把整件事都放在这里只是为了看看发生了什么,但我把我想修改的文件放在了粗体(旁边放了星星)上。如您所见,我多次调用了我的文件“png1.png”,还调用了将该文件的修改版本保存到“png2.png”以及稍后的jpeg版本“png1.jpg”。我不想每次都要检查我的脚本,然后逐个修改。我希望更早地定义它们,比如A=png1、B=png2、C=jpg1,这样我就可以用B和C来替换循环中的调用,如果我选择了一个新的图像上传,我只需更改1或2行,而不是5或6行。即

heart_mask=np.array(Image.open("A"))
split= str('A').rsplit('.')
image = Image.open("A")
canvas.save('B')
... so on and so forth

为了简化任务,您可能应该建立一个命名标准,定义要修改的文件,以及已经处理的文件。此外,您要处理的图像应该有一个专用的目录

根据我在代码中的理解,PNG文件是正在处理的文件,而JPEG文件已经处理完毕。您可以使用
os.listdir()
遍历扩展名为.png的文件列表,类似于下面的扩展名:

for file in os.listdir( "/dedicated_image_dir" ):
    if file.endswith(".png"):
        # Process your PNG images here

这样,您甚至不需要更改代码来适应具有不同文件名的新PNG图像。

PNG是要处理的文件,JPEG不需要任何处理。问题是我已经指定了要处理的图像(这就是分割线和尺寸界线的用途)。第一个修改是在图像中添加白色背景(对于透明PNG),然后我想将其保存为第二个文件。然后我要求将第二个文件转换为jpeg文件,我也希望单独保存。在这个循环中,我写了两个不同的文件。我想要的是找到一种早期定义这些文件的方法,这样我就可以在我的脚本中修改早期应该调用的文件。也许您可以创建一个输入文件,其中包含要处理的文件的文件名,您可以在运行程序之前对其进行编辑。然后,程序每次运行时都应读取输入文件。这样,在确定要处理的图像的文件名时,只需查看输入文件,这仍然无法解决输出文件的问题。我考虑的更多的是一种方法,简单地定义脚本中输入和输出文件应该是什么,并简单地将这些定义放入实际代码中进行修改。这样,我只需要修改它们一次(例如,当您有一个GUI,输入您的文件并指定您的输出文件时,代码只是通过脚本中的不同位置调用它们)