Python必会操作

本文详细介绍了Python中处理命令行参数的方法,包括使用sys模块和argparse模块。同时,文章深入探讨了文件和目录操作,如读写文件、处理目录结构、解析XML和JSON文件以及CSV数据。此外,还展示了如何自定义Python模块并进行调用,强调了在深度学习和图像处理等场景中文件操作的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令行参数

import sys
import cv2
def show_pic(img):
   cv2.imshow('image',img)
   cv2.waitKey(0)
   cv2.destroyAllWindows()
def main():
   print("start")
   print (sys.argv)
   image_1 = sys.argv[1]
   image_2 = sys.argv[2]
   src = cv2.imread(image_1)
   show_pic(src)
   print("end")
if __name__ == "__main__":
   main()

运行方式

在这里插入图片描述
说明: 更加深入学习命令行参数,学习argparse这个模块。tensortflow也内置了命令行参数的API,
很多深度学习代码不能直接运行,需要设置参数,路径等。如果不会写界面,大多需要用到命令行参数。

目录操作

import sys
import os
def root_ope():
   current_file = __file__                              #获取执行的Python完整文件名,D:\server\root.py 1
   print (current_file,"1")                     
   base_name = os.path.basename(current_file)           #获取文件名,不包含目录,root.py 2
   print (base_name,"2")
   current_root =  os.path.dirname(__file__)            #获取当前文件的上级(父)目录,D:\server 3
   print (current_root,"3")
   current_up =  os.path.dirname(current_root)          #获取当前文件的上级目录,D:\ 4
   print (current_up,"4") 
   file_list = os.listdir(current_root)                 #获取此目录下的所有文件及目录,返回列表,['a.png', 'a1.png', ..... ] 5
   print (file_list,"5")
   file_root1 = os.path.join(current_root,file_list[0]) #拼接目录,D:\server\a.png 6
   file_root2 = current_root+"\\"+file_list[0]          #拼接目录,D:\server\a.png 7
   print (file_root1,"6")
   print (file_root2,"7")
   replace_file_root1 = file_root1 .replace("\\","/")   #替换字符,D:/server/a.png 8
   print (replace_file_root1,"8")
   split_file_root1 = file_root1.split("\\")            #根据字符分离字符串,['D:', 'server', 'a.png'] 9
   print (split_file_root1,"9")
   split_file_root2 = file_root1.split(".")             #根据字符分离字符串,['D:\\server\\a', 'png'] 10
   print (split_file_root2,"10")
   child_name_ext = os.path.splitext(file_root1)        #获取文件后缀名,('D:\\server\\a', '.png') 11
   print (child_name_ext,"11")

def getListFiles(path): 
   """
   遍历目录下的所有文件,包含所有层级目录,os.walk类似于一个迭代器。
   """

   print(type(os.walk(path)))
   ret = [] 
   for root, dirs, files in os.walk(path): 
       #print (root,dirs)
       for filespath in files: 
           #print(os.path.join(root,filespath))
           ret.append(os.path.join(root,filespath)) 
   return ret


def main():
   root_ope()
   file = getListFiles("D:/server/pic_xiangsi")
   print ("file_counter:",len(file))

if __name__ == "__main__":
   main()

os.walk

在这里插入图片描述
运行 for (root, dirs, files) in os.walk(‘a’):

#第一次运行时,当前遍历目录为 a
所以 root == ‘a’
dirs == [ ‘b’, ‘c’, ‘d’]
files == [ ‘4.txt’, ‘5.txt’]

#接着遍历 dirs 中的每一个目录
b: root = ‘a\b’
dirs = []
files = [ ‘1.txt’, ‘2.txt’]

#dirs为空,返回
# 遍历c
c: root = ‘a\c’
dirs = []
files = [ ‘3.txt’ ]

#遍历d
d: root = ‘a\b’
dirs = []
files = []
遍历完毕,退出循环

说明: 深度学习,图像处理,目标检测,神经网络等操作时需要对文件进行处理,都要求掌握基本的目录、
文件处理以及文件的基本能力。

文件操作

import sys
import cv2
import os
import csv
import json
import xml
import random
import pandas as pd
import xml.etree.ElementTree as ET
from xml.dom import minidom
from xml.dom.minidom import parse

"""
此外文件读写还可以写成这种形式,更加简洁,方便,会自动关闭文件。
with open("text.txt","w") as f:
   f.write("data")

with open("text.txt","r") as f:
   data = f.read()
   data = f.readlines()


json.dumps(test_dict) #将数据转化为字符串

## type print (type(120))

## help print (help(json))

## dir print (dir(json))

"""
"""
0001.xml
<annotation verified="no">
 <folder>pic</folder>
 <filename>0001</filename>
 <path>E:\Download\object_detection_training\object_detection\dataset\pic\0001.jpg</path>
 <source>
   <database>Unknown</database>
 </source>
 <size>
   <width>356</width>
   <height>240</height>
   <depth>3</depth>
 </size>
 <segmented>0</segmented>
 <object>
   <type>bndbox</type>
   <name>tortoise</name>
   <pose>Unspecified</pose>
   <truncated>0</truncated>
   <difficult>0</difficult>
   <bndbox>
     <xmin>38</xmin>
     <ymin>27</ymin>
     <xmax>329</xmax>
     <ymax>234</ymax>
   </bndbox>
 </object>
</annotation>
"""
def file_read(filename):
   f = open(filename,"r")
   data = f.read()
   print (data)
   f.close()
   return data

def file_write(filename,data):
   f = open(filename,"w")
   f.write(data)
   f.close()

def list_line_write(filename,list):
   f = open(filename,"w")
   for i,data in  enumerate(list):
   	f.write(str(data)+"\n")
   f.close()

def list_line_read(filename):
   f = open(filename,"r")
   list = f.readlines()
   for i,data in  enumerate(list):
   	print (i,data)
   f.close()
   return list

def json_read(filename):
   with open(filename,"r") as f:
   	data = json.load(f)
   return data

def json_write(filename,data):
   with open(filename,"w") as f:
   	json.dump(data,f,indent = 4)
def csv_read(filename):
   all_list = []
   with open(filename) as f:
   	f_csv = csv.reader(f)
   	for i,row in enumerate(f_csv):
   		all_list.append(row)
   return all_list

def csv_write(filename,data):
   column_name = ['1', '2', '3', '4', '5', '6', '7', '8','9','10','11', '12', '13', '14', '1', '16', '17', '18','19','20']
   data_pd = pd.DataFrame(data, columns=column_name)
   data_pd.to_csv(filename, index=None)

def xml_read(filename):
   xml_list = []
   tree = ET.parse(filename)
   root = tree.getroot()
   for member in root.findall('object'):
   	value = (
   			root.find('filename').text,
   			int(root.find('size').find("width").text),
   			int(root.find('size').find("height").text),
   			member.find("name").text,
   			int(member.find("bndbox")[0].text),
   			int(member.find("bndbox")[1].text),
   			int(member.find("bndbox")[2].text),
   			int(member.find("bndbox")[3].text)
   			 )
   xml_list.append(value)
   return xml_list

def xml_write(filename,data):
   #xml_obj = minidom.getDOMImplementation()
   #doc = xml_obj.createDocument(None, None, None)
   doc = minidom.Document()
   xmemlElement = doc.createElement('annotation')
   doc.appendChild(xmemlElement)
   
   filename_element  = doc.createElement('filename')
   filename_text = doc.createTextNode(data[0][0])
   filename_element.appendChild(filename_text)
   xmemlElement.appendChild(filename_element)

   size_element  = doc.createElement('size')
   size_element_width = doc.createElement("width")
   size_element_height = doc.createElement("height")
   size_element_width_text = doc.createTextNode(str(data[0][2]))
   size_element_height_text = doc.createTextNode(str(data[0][1]))
   size_element_width.appendChild(size_element_width_text)
   size_element_height.appendChild(size_element_height_text)

   size_element.appendChild(size_element_width)
   size_element.appendChild(size_element_height)
   xmemlElement.appendChild(size_element)

   object_element  = doc.createElement('object')
   object_element_name = doc.createElement("name")
   object_element_name_text = doc.createTextNode(data[0][3])
   object_element_bndbox = doc.createElement("bndbox")

   object_element_bndbox_xmin = doc.createElement("xmin")
   object_element_bndbox_ymin = doc.createElement("ymin")
   object_element_bndbox_xmax = doc.createElement("xmax")
   object_element_bndbox_ymax = doc.createElement("ymax")

   object_element_bndbox.appendChild(object_element_bndbox_xmin)
   object_element_bndbox.appendChild(object_element_bndbox_ymin)
   object_element_bndbox.appendChild(object_element_bndbox_xmax)
   object_element_bndbox.appendChild(object_element_bndbox_ymax)

   object_element_bndbox_xmin_text = doc.createTextNode(str(data[0][4]))
   object_element_bndbox_ymin_text = doc.createTextNode(str(data[0][5]))
   object_element_bndbox_xmax_text = doc.createTextNode(str(data[0][6]))
   object_element_bndbox_ymax_text = doc.createTextNode(str(data[0][7]))

   object_element_bndbox_xmin.appendChild(object_element_bndbox_xmin_text)
   object_element_bndbox_ymin.appendChild(object_element_bndbox_ymin_text)
   object_element_bndbox_xmax.appendChild(object_element_bndbox_xmax_text)
   object_element_bndbox_ymax.appendChild(object_element_bndbox_ymax_text)

   object_element_name.appendChild(object_element_name_text)
   object_element.appendChild(object_element_name)
   object_element.appendChild(object_element_bndbox)
   xmemlElement.appendChild(object_element)

   with open(filename,"w") as f:
   	doc.writexml(f, indent='\t', addindent='\t', newl='\n', encoding="utf-8")


def create_list():
   list_all = []
   for i in range(10):
   	list = []
   	for j in range(20):
   		list.append(random.randint(0,20))
   	list_all.append(list)
   return list_all

def create_dict():
   dict_all = {}
   for i in range(10):
   	list = []
   	for j in range(20):
   		list.append(random.randint(0,20))
   	dict_all[str(i)] = list

   return dict_all

def main():
   
   print ("satrt".center(30,"-"))
   list_data = create_list()
   #print (list_data)
   dict_data = create_dict()
   #print (dict_data)

   file_write("list.txt",str(list_data))
   file_read("list.txt")

   list_line_write("list_lines.txt",list_data)
   list_line_read("list_lines.txt")

   json_write("dict_data.json",dict_data)
   json_write("list_data.json",list_data)

   list_data = json_read("list_data.json")
   #print (list_data)
   dict_data = json_read("dict_data.json")
   #print (dict_data)

   csv_write("list_data.csv",list_data )
   list_data = csv_read("list_data.csv")
   #print (list_data)

   xml_data = xml_read("0001.xml")
   print (xml_data)
   xml_write("new.xml",xml_data)

   print ("end".center(30,"-"))


if __name__ == "__main__":
   main()
   

说明:
深度学习,图像处理,目标检测,神经网络等操作时需要对文件进行处理,都要求掌握基本的目录、
文件处理以及文件的基本能力。 包含基本文件读写,列表,字典,元组操作。
1.基本文件读写方式,及数据简单处理
2.json文件读写方式,及数据简单处理
3.xml文件读写方式,及数据简单处理
4.csv文件读写方式,及数据简单处理

自定义模块调用

root_look.py(自定义的模块,不运行它)

import sys
import cv2
import os

class GetRootFiles(object):
   def __init__(self):
       print ("look root file")
   def look_root(self,path):
       ret = [] 
       for root, dirs, files in os.walk(path): 
           #print (root,dirs)
           for filespath in files: 
               #print(os.path.join(root,filespath))
               ret.append(os.path.join(root,filespath)) 
       return ret

def getListFiles(path): 
   """
   遍历目录下的所有文件,包含所有层级目录,os.walk类似于一个迭代器。
   """
   ret = [] 
   for root, dirs, files in os.walk(path): 
       #print (root,dirs)
       for filespath in files: 
           #print(os.path.join(root,filespath))
           ret.append(os.path.join(root,filespath)) 
   return ret


def main():
   root_ope()
   file = getListFiles("D:/server/pic_xiangsi")
   print ("file_counter:",len(file))



if __name__ == "__main__":
   main()

use_moudle.py (运行这个文件,调用自定义模块)

import root_look
from root_look import getListFiles
from root_look import GetRootFiles

def main():

   #data = root_look.getListFiles("D:/server/pic_xiangsi")
   #data = getListFiles("D:/server/pic_xiangsi")
   #data = GetRootFiles().look_root("D:/server/pic_xiangsi")
   data = root_look.GetRootFiles().look_root("D:/server/pic_xiangsi")
   for i,li in enumerate(data):
   	print (i,li)

main()

if __name__ == "__main__":
   main()
   
"""
look root file
0 D:/server/pic_xiangsi\alcremie.png
1 D:/server/pic_xiangsi\altaria.png
2 D:/server/pic_xiangsi\current.json
3 D:/server/pic_xiangsi\dataset_xsd.py
4 D:/server/pic_xiangsi\display_rect_check.py
5 D:/server/pic_xiangsi\get_record_num_file.py
6 D:/server/pic_xiangsi\network.py
7 D:/server/pic_xiangsi\network1.py
...
...

"""  

说明:
将两个文件放入同级目录,调用自定义的函数或类模块。
也可以放在Python的模块包的路径下。
当存在两个同名的模块时,优先调用同级目录的模块。
当存在不同版本的模块时,可以采用此方法。
我们有时需要修改别人写的模块,必须知道基本的原理,以及模块包的结构。

构建项目工程模块包

暂时 等待,日后更新
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值