批量取出文件夹中图片的名字存进文本,并去命名新的文件夹下的图片

这个任务为具体分为两步完成的:

1、取出文件中的图片的名字存入到文本中;

2、逐行取出文本中的名字去逐个命名新文件夹下的图片;

任务一:

 1 # -*- coding:utf-8 -*-
 2 import sys
 3 sys.path.append(‘D:\tensorflow\install\libs‘)
 4 import os #os:操作系统相关的信息模块
 5 import random #导入随机函数
 6 #存放原始图片地址
 7 #data_base_dir = r"F:\underwater slam\VOC\VOC2007\JPEGImages"
 8 data_base_dir = r"F:\1picture"
 9 file_list = [] #建立列表,用于保存图片信息
10 #读取图片文件,并将图片地址、图片名和标签写到txt文件中
11 write_file_name = r‘F:\dir.txt‘
12 write_file = open(write_file_name, "w") #以只写方式打开write_file_name文件
13 for file in os.listdir(data_base_dir): #file为current_dir当前目录下图片名
14     if file.endswith(".jpg"): #如果file以jpg结尾
15         write_name = file #图片路径 + 图片名 + 标签
16         file_list.append(write_name) #将write_name添加到file_list列表最后
17 sorted(file_list) #将列表中所有元素随机排列
18 number_of_lines = len(file_list) #列表中元素个数
19 #将图片信息写入txt文件中,逐行写入
20 for current_line in range(number_of_lines):
21     write_file.write(file_list[current_line] + ‘\n‘)
22 #关闭文件
23 write_file.close()

任务二:

 1 #include <iostream>
 2 #include <io.h>  //对系统文件进行操作的头文件
 3 #include <string>
 4 #include <sstream>
 5 #include<vector>
 6 #include <fstream>
 7
 8 using namespace std;
 9
10 const string FileType = ".jpg";    // 需要查找的文件类型
11
12 int main()
13 {
14     _finddata_t c_file;   // 查找文件的类
15
16     string File_Directory = "F:\\1picture";   //文件夹目录
17     string strFlie = "F:\\draft\\draft\\rgbd_dataset_freiburg2_desk\\dir.txt";
18     ifstream f;
19
20     f.open(strFlie.c_str());
21
22     string buffer = File_Directory + "\\*" + FileType;
23
24     //long hFile;  //win7系统,_findnext()返回类型可以是long型
25     intptr_t hFile;   //win10系统 ,_findnext()返回类型为intptr_t ,不能是long型
26     hFile = _findfirst(buffer.c_str(), &c_file);   //找第一个文件
27
28     if (hFile == -1L)   // 检查文件夹目录下存在需要查找的文件
29         printf("No %s files in current directory!\n", FileType);
30     else
31     {
32         printf("Listing of files:\n");
33
34         int i = 0;
35         string newfullFilePath;
36         string oldfullFilePath;
37         string str_name;
38         do
39         {
40             oldfullFilePath.clear();
41             newfullFilePath.clear();
42             str_name.clear();
43
44             getline(f, str_name);
45             if (str_name == "")
46             {
47                 cout << "文件数大于文件名" << endl;
48                 break;
49             }
50
51             //旧名字
52             oldfullFilePath = File_Directory + "\\" + c_file.name;
53             //新名字
54             newfullFilePath = File_Directory + "\\" + str_name + FileType;
55
56             /*重命名函数rename(const char* _OldFileName,const char* _NewFileName)
57             第一个参数为旧文件路径,第二个参数为新文件路径*/
58             int c = rename(oldfullFilePath.c_str(), newfullFilePath.c_str());
59
60             if (c == 0)
61                 puts("File successfully renamed");
62             else
63                 perror("Error renaming file");
64
65         } while (_findnext(hFile, &c_file) == 0);  //如果找到下个文件的名字成功的话就返回0,否则返回-1
66         _findclose(hFile);
67     }
68     system("pause");
69     return 0;
70 }

原文地址:https://www.cnblogs.com/wall-e2/p/9829330.html

时间: 2024-08-06 16:15:53

批量取出文件夹中图片的名字存进文本,并去命名新的文件夹下的图片的相关文章

OpenCV C++ 计算文件夹中对象文件数目及批量处理

1 //采用windows控制台实现计算文件夹中对象总数以及批量读取对象 2 3 //#include <afx.h> //和windows.h是一样的作用 4 #include <opencv2/opencv.hpp> 5 #include <windows.h> 6 7 using namespace cv; 8 using namespace std; 9 10 int main() 11 { 12 int count = 1; //记录文件夹中对象数目 13 1

自动备份指定文件列表中的文件到指定文件夹

因为业务需要,在每次页面变更的时候,都需要将原来的文件备份,下边是自己写的一个自动备份的脚本 #!/bin/bash #读取指定文件中文件列表,文件列表中每行一个 #脚本自动读取每行数据,判断文件是否存在,如果存在,则复制到按照时间命名的备份文件中.如果否则记录路径名称 FILE_LISTS=list.txt #定义列表文件名称,脚本必须和文件列表文件在同一目录下 CUR_PATH=`pwd`  #定义当前路径,执行脚本必须到脚本目录,如果要通过计划任务执行,则需要进行一定修改,将此路径修改为指

Java 遍历文件下jpg图片并解析图片

  1 package filetest; 2 3 import java.io.File; 4 import java.io.FilenameFilter; 5 import java.io.IOException; 6 import java.util.ArrayList; 7 8 import com.drew.imaging.jpeg.JpegMetadataReader; 9 import com.drew.imaging.jpeg.JpegProcessingException; 1

如何在Linux下重命名多个文件

在Linux中,当你想要改变一个文件名,使用mv命令就好了.然而mv不能使用通配符重命名多个文件.可以用sed.awk或者与xargs结合使用来处理多个文件的情况.然而,这些命令行即繁琐又不友好,并且如果不小心的话还很容易出错.你不会想要撤销1000个文件的错误名吧! 当你想要重命名多个文件的时候,rename 工具或许是最简单.最安全和最强大的命令行工具.这个rename命令实际上是一个Perl脚本,它预安装在所有的现在Linux发行版上. 下面是重命名命令的基本语法. 是Perl兼容正则表达

Linux命令技巧:如何在Linux下重命名多个文件

我知道我可以用mv命令重命名文件.但是当我想重命名很多文件怎么办?如果为每个文件都这么做将会是很乏味的.有没有办法一次性重命名多个文件? 在Linux中,当你想要改变一个文件名,使用mv命令就好了.然而mv不能使用通配符重命名多个文件.可以用sed.awk或者与xargs结合使用来处理多个文件的情况.然而,这些命令行即繁琐又不友好,并且如果不小心的话还很容易出错.你不会想要撤销1000个文件的错误名吧! 当你想要重命名多个文件的时候,rename 工具或许是最简单.最安全和最强大的命令行工具.这

如何把一个数据存到文件系统中?是怎么存的?--【sky原创】

块设备文件: 表示文件系统高速缓存的设备,例如硬盘驱动器 设备文件: 表示非高速缓存的设备,例如磁带驱动器.鼠标和系统终端 那么如何把一个数据存到文件系统中?是怎么存的? 一般地,我们认为文件就是文件的数据信息,它存放在磁盘上,如果单纯的这样理解就错了 和每一个文件相关的信息都会放在索引节点上,比方说它是字符设备的话,就是字符设备文件,还有它的权限,属组,以及大小.更新时间等信息都属于文件的相关信息,如果一个文件的大小是1kb的话,那么实际拷贝文件的话,所需要的空间要大于1kb,因为它还要拷贝索

image 有缓存的情况下,图片名称不变,链接不变,只有图片变化的情况下,如何知道图片发生变化需要更新图片?

既然给这张图片写了缓存,那么你请求数据的时候,一定要先从缓存取看,缓存有没有这张图片,如果有就从缓存读取图片信息,不联网.这是正常的思路,但是现在图片更新了.但是你缓存还在,这是你请求数据,去缓存读,缓存还是有图片的,所以你不可能去网络加载.所以你的图片还是缓存的,不可能更新. 所以既然本地有缓存,缓存又没有超时,即使后台更新了图片,我们也获取不到最新的,除非缓存超时或者用户清了缓存,这样才能联网,这时候获取的是新的图片.不然,我觉得不可能获取到新图片,这是矛盾的.

批量改变文件夹和子文件夹中图片格式的两种方法

生活中,我们通常会遇到这种问题:一个文件夹内部有多个子文件夹,每个文件夹内部有很多图片,我们想改变这些图片的格式. 例如.png格式图片支持背景透明,但我们想把它变成背景不透明的.jpg图片.又比如.bmp格式是非压缩图片,我们想把它转换为无损压缩的.png图片以节省存储空间. 如果图片数量很少,很明显我们可以通过Windows自带的画图工具或者其他看图软件通过“另存为”一张张地转换图片格式.但是如果图片很多,怎么办? 这个问题其实有两个关键点: ① 要求批量处理. ② 文件夹中还有子文件夹.

VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)

'=========================================================================='' VBScript Source File -- Created with SAPIEN Technologies PrimalScript 4.0'' NAME: '' AUTHOR: Microsoft , Microsoft' DATE : 2014/7/9'' COMMENT: '批量修改文件夹下对应的所有文件名''==========