如何在Python中循环以使用列表中的名称创建文件

时间:2019-06-05 17:59:27

标签: python-3.x loops

我有一个颜色列表,带有一个txt文件,其中包含这些颜色的图像的URL。我正在尝试创建一个文件夹来包含每种颜色的图像,并移动此目录,以便最终可以下载图像。

我可以对列表的每个元素分别执行此操作,但这很繁琐,我希望将其自动化。

classes = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']

这是我目前每种颜色的代码:

folder = 'red'
file = 'red.txt'
mv red.txt data/colors

path = Path('data/colors')
dest = path/colors
dest.mkdir(parents=True, exist_ok=True)

download_images(path/file, dest, max_pics=200)

我希望每种颜色都有一个文件夹,其中包含各自下载的图像。

1 个答案:

答案 0 :(得分:1)

您的颜色列表在classes python列表中。您有<color name>.txt个文件,其中包含classes列表中列出的这些颜色的图像的URL。因此,您具有一个初始目录结构,看起来像下面的目录树:

.
├── blue.txt
├── green.txt
├── orange.txt
├── purple.txt
├── red.txt
├── script.py
└── yellow.txt

现在,您要为每种颜色创建单独的目录。所以最后您的目录结构应类似于以下目录树:

.
├── data
│   └── colors
│       ├── blue
│       ├── blue.txt
│       ├── green
│       ├── green.txt
│       ├── orange
│       ├── orange.txt
│       ├── purple
│       ├── purple.txt
│       ├── red
│       ├── red.txt
│       ├── yellow
│       └── yellow.txt
└── script.py

您的download_image()方法将在<color name>.txt文件中下载给定URL的图像,该图像作为参数之一接收。它还会接收要放置的图像目录的目的地以及应下载的最大图像数量。

如果我正确理解了您的问题,那么遵循以下代码可以解决您的问题。代码经过了很好的注释并且不言自明。您可以删除评论以要求更多说明。

import os

base_path = "data/colors/"
# create base path directories if not already present
os.system("mkdir -p data")
os.system("mkdir -p data/colors")

classes = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']

# dummy download image function
def download_image(path, dest, max_pics):
    print("URL file path: " + path)
    print("Image destination: " + dest)
    print("No of Images to be downloaded: " + str(max_pics))

if __name__ == "__main__":
    for colour in classes:
        # create directories for each colour if not already present
        os.system("mkdir -p " + base_path + colour)
        # move <colour_name>.txt file into base path
        os.system("mv " + colour+".txt " + base_path)
        dest = base_path + colour
        # call download_image method
        download_image(base_path+colour+".txt", dest, max_pics=200)