一些Linux文件操作和Python操作集合
- 1.将一个文件夹下的某种文件(如jpg)移动到一个新的文件夹
- 2.将一个大文件夹(包含子文件夹)的tiff文件转为png文件后输出到一个新文件夹
- 3.将一个大文件夹下的所有分文件夹下的文件复制到一个新文件夹
- 4.利用opencv 批量将jpg格式图像转png图像(文件大小会变大[约扩大8倍左右],因为是非直接改后缀名)
- 5.查看文件夹大小或某个文件大小
- 5.1 du filepath:查看指定文件夹的大小(不指定默认为当前文件夹,且不递归显示子目录)
- 5.2 du -h filepath:以K 或M 或G人们更常见的方式展示大小
- 6.查看文件夹下文件个数
- 6.1 查看某文件夹下文件的个数,包括子文件夹里的。
- 6.2 查看某文件夹下文件夹的个数,包括子文件夹里的
- 6.3 查看某种文件的个数(如jpg)
- 7.数据集划分(抽取大约1/16的图像做测试集):
- 8.利用PIL库将多张图像排列组合成一张图像
- 9.将一个文件夹下的所有文件名排序后输出到一个txt文件
- 10.zip把一个文件夹所有的文件压缩到一个压缩包
- 11.ln -s 创建软链接避免同一文件占用多个文件夹中的位置
1.将一个文件夹下的某种文件(如jpg)移动到一个新的文件夹
import os
import shutil
import tqdm
old_path = '/root/xinyuan/datasets'
new_path = '/root/xinyuan/resiscpng/'
for root, dirs, files in os.walk(old_path, topdown=True):
for file in files:
if file.endswith(".jpg") :
shutil.move(os.path.join(root, file), os.path.join(new_path, file))
2.将一个大文件夹(包含子文件夹)的tiff文件转为png文件后输出到一个新文件夹
#将一个大文件夹(包含子文件夹)下的tiff文件转为png文件后输出到一个文件夹
import os
import cv2
# TIF_img_dir为输入TIF文件夹
# PNG_img_dir为输出PNG文件夹
def Tif_To_Png(TIF_img_dir, PNG_img_dir):
# 创建输出目录
if os.path.exists(PNG_img_dir):
pass
else:
os.mkdir(PNG_img_dir)
TIF_names = os.listdir(TIF_img_dir)
for name in TIF_names:
absolute_path = TIF_img_dir + '/' + name
TIF_image = cv2.imread(absolute_path)
# print(PNG_img_dir + '/' + name[:-3] + 'png')
# print(TIF_image)
cv2.imwrite(PNG_img_dir + '/' + name[:-3] + 'png', TIF_image)
def get_dirlist():
Filedirs = []
for home, dirs, files in os.walk(TIF_path):
for dirname in dirs:
# 文件夹列表,包含完整路径
Filedirs.append(os.path.join(home, dirname))
return Filedirs
if __name__ == '__main__':
#原来的大文件夹路径
TIF_path = '/root/xinyuan/datasets/UCMerced_LandUse/Images'
#新文件夹路径
PNG_dir = '/root/xinyuan/datasets/UCMLandPng'
Filedirs = get_dirlist()
#子文件夹个数
print(len(Filedirs))
for filedir in Filedirs:
Tif_To_Png(filedir,PNG_dir)
3.将一个大文件夹下的所有分文件夹下的文件复制到一个新文件夹
import os
import shutil
def CreateDir(path):
isExists=os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
os.makedirs(path)
print(path+' 目录创建成功')
else:
# 如果目录存在则不创建,并提示目录已存在
print(path+' 目录已存在')
def CopyFile(filepath, newPath):
# 获取当前路径下的文件名,返回List
fileNames = os.listdir(filepath)
for file in fileNames:
# 将文件命加入到当前文件路径后面
newDir = filepath + '/' + file
# 如果是文件
if os.path.isfile(newDir):
print(newDir)
newFile = newPath + file
shutil.copyfile(newDir, newFile)
#如果不是文件,递归这个文件夹的路径
else:
CopyFile(newDir,newPath)
if __name__ == "__main__":
path = '/root/xinyuan/datasets/NWPU-RESISC45'
# 创建目标文件夹
mkPath = '/root/xinyuan/datasets/respng/'
CreateDir(mkPath)
CopyFile(path,mkPath)
4.利用opencv 批量将jpg格式图像转png图像(文件大小会变大[约扩大8倍左右],因为是非直接改后缀名)
import os
import cv2
def transform(input_path, output_path):
for root, dirs, files in os.walk(input_path):
for name in files:
file = os.path.join(root, name)
print('transform ' + name + " to pngfile")
im = cv2.imread(file)
if output_path:
cv2.imwrite(os.path.join(output_path, name.replace('jpg', 'png')), im)
else:
cv2.imwrite(file.replace('jpg', 'png'), im)
if __name__ == '__main__':
input_path = '/root/xinyuan/datasets/respng'
output_path = '/root/xinyuan/datasets/RESISC45PNG'
if not os.path.exists(input_path):
print("文件夹不存在!")
else:
print("Start to transform!")
transform(input_path, output_path)
print("Transform end!")
5.查看文件夹大小或某个文件大小
5.1 du filepath:查看指定文件夹的大小(不指定默认为当前文件夹,且不递归显示子目录)
root@be7288f5053b:~/xinyuan/datasets/respng# du roundabout_525.jpg
16 roundabout_525.jpg
5.2 du -h filepath:以K 或M 或G人们更常见的方式展示大小
root@be7288f5053b:~/xinyuan/datasets/respng# du -h roundabout_525.jpg
16K roundabout_525.jpg
6.查看文件夹下文件个数
6.1 查看某文件夹下文件的个数,包括子文件夹里的。
ls -lR|grep "^-"|wc -l
例如:
root@be7288f5053b:~/xinyuan/datasets/RESISC45PNG# ls -lR|grep "^-"|wc -l
31500
6.2 查看某文件夹下文件夹的个数,包括子文件夹里的
ls -lR|grep "^d"|wc -l
例如:
root@be7288f5053b:~/xinyuan/datasets# ls -lR|grep "^d"|wc -l
79
6.3 查看某种文件的个数(如jpg)
统计当前目录及所有子目录下以‘.jpg’后缀结尾的图片个数:
ls -lR | grep '.jpg' |wc -l
例如:
root@be7288f5053b:~/xinyuan/datasets# ls -lR|grep ".jpg"|wc -l
63001
7.数据集划分(抽取大约1/16的图像做测试集):
# -*- coding: utf-8 -*-
# @Time : 2022/5/23 22:02
# @File : drawTest.py
# @RandomNumberSite:https://rand.91maths.com/ 随机生成数字网站
# @Function: 随机生成11-99中的6个数字为28 69 55 60 74 97,指定这些后缀.png的图片为测试图片,移动到测试文件夹下
import os
import shutil
import tqdm
def CreateDir(path):
isExists=os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
os.makedirs(path)
print(path+' 目录创建成功')
else:
# 如果目录存在则不创建,并提示目录已存在
print(path+' 目录已存在')
def drawFile(filepath, newPath):
for root, dirs, files in os.walk(filepath, topdown=True):
for file in files:
if file.endswith("28.png") or file.endswith("69.png") or file.endswith("55.png") or file.endswith("60.png") or file.endswith("74.png") or file.endswith("97.png") :
shutil.move(os.path.join(root, file), os.path.join(newPath, file))
if __name__ == "__main__":
filepath = '/root/xinyuan/datasets/RESISC45PNG'
# 创建目标文件夹
newPath = '/root/xinyuan/datasets/RESISCtest'
CreateDir(newPath)
drawFile(filepath,newPath)
8.利用PIL库将多张图像排列组合成一张图像
import PIL.Image as Image
import os
IMAGES_PATH = '/root/xinyuan/datasets/testsetsaugment/' # 图片集地址
IMAGES_FORMAT = ['.png', '.JPG'] # 图片格式
IMAGE_SIZE = 256 # 每张小图片的大小
IMAGE_ROW = 2 # 图片间隔,也就是合并成一张图后,一共有几行
IMAGE_COLUMN = 4 # 图片间隔,也就是合并成一张图后,一共有几列
IMAGE_SAVE_PATH = '/root/xinyuan/datasets/birdaugmentall.png' # 图片转换后的地址
# 获取图片集地址下的所有图片名称
image_names = [name for name in os.listdir(IMAGES_PATH) for item in IMAGES_FORMAT if
os.path.splitext(name)[1] == item]
#自定义排序方法:将flip_0_bird.png分为3段进行排序,避免python的默认sort排序导致含180的字符串排在带90的前
def func(info):
names = info.split('_')
return (names[0], int(names[1]), names[2])
#使用sort()将图片列表永久排序
image_names.sort( key = func)
# 简单的对于参数的设定和实际图片集的大小进行数量判断
if len(image_names) != IMAGE_ROW * IMAGE_COLUMN:
raise ValueError("合成图片的参数和要求的数量不能匹配!")
# 定义拼接函数
def image_compose():
to_image = Image.new('RGB', (IMAGE_COLUMN * IMAGE_SIZE, IMAGE_ROW * IMAGE_SIZE)) #创建一个新图
# 循环遍历,把每张图片按顺序粘贴到对应位置上
for y in range(1, IMAGE_ROW + 1):
for x in range(1, IMAGE_COLUMN + 1):
from_image = Image.open(IMAGES_PATH + image_names[IMAGE_COLUMN * (y - 1) + x - 1]).resize(
(IMAGE_SIZE, IMAGE_SIZE),Image.ANTIALIAS)
to_image.paste(from_image, ((x - 1) * IMAGE_SIZE, (y - 1) * IMAGE_SIZE))
return to_image.save(IMAGE_SAVE_PATH) # 保存新图
image_compose() #调用函数
9.将一个文件夹下的所有文件名排序后输出到一个txt文件
import os
path = '/root/xinyuan/datasets/RESISC45PNG/' # 替换为你的文件夹路径
dir = os.listdir(path) # dir是目录下的全部文件
fopen = open('/root/xinyuan/datasets/list.txt', 'w') # 替换为你的文件名路径
#使用sort()将文件名列表永久排序
dir.sort()
for d in dir: # d是每一个文件的文件名
string = d + '\n' #拼接字符串并换行
fopen.write(string) # 写入文件中
fopen.close()
10.zip把一个文件夹所有的文件压缩到一个压缩包
将 /home/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip:
zip -r html.zip /home/html
11.ln -s 创建软链接避免同一文件占用多个文件夹中的位置
将 datasets/GoPro 这个目录下所有文件和文件夹软链接到另一个目录下:
ln -s 原有文件绝对路径 准备建立链接到的路径
【!!!】如果是软链接文件,则链接路径后需要加上文件名
ln -s /root/Learning_degradation/datasets/GoPro /root/BasicSR/datasets/GoPro