Directorio de artículos
-
-
-
-
- Resumen: personalice las teclas de acceso directo en ejecución
- Ejercicio 1: Primera experiencia de funcionamiento de archivos y problemas de codificación
- Ejercicio 2: lectura de archivos
- Ejercicio 3: agregue un número de línea al final de cada línea del archivo de texto
- Ejercicio 4: copiar un archivo
- Ejercicio 5: serialización y deserialización
- Ejercicio 6: Operación de archivos CSV
- Ejercicio 7: operaciones de directorio
- Ejercicio 8: enumere todos los archivos .py en el directorio especificado y genere el nombre del archivo
- Ejercicio 9: Prueba de uso de la función de recorrido de caminata
- Ejercicio 10: prueba la copia y compresión de módulos shutil
- Ejercicio 11: use un método recursivo para recorrer todo el directorio e imprimirlo como un árbol
-
-
-
Resumen: personalice las teclas de acceso directo en ejecución
Antes pensé que era demasiado problemático hacer clic con el mouse. Por cierto, lo configuré hoy. Para referencia, haga clic aquí.
Ejercicio 1: Primera experiencia de funcionamiento de archivos y problemas de codificación
write (a): escribe la cadena a en el archivo
writeelines (b): escribe la lista de cadenas en el archivo sin agregar caracteres de nueva línea
f = open(r"a.txt","w",encoding="utf-8") #指定utf-8编码
f.write("今天是2020-11-16")
f.close()
La codificación y la decodificación coinciden y la información se puede ver normalmente.
f = open(r"Blank.txt","a",encoding="utf-8")
s = ["Clichong\n","Lawrence\n","Kacura\n"]
ss = "啦啦啦,啦啦啦,我是卖报的小当家"
f.writelines(s)
f.write(ss)
f.close()
Úselo con el administrador de contexto para administrar
s = ["Clichong ","Lawrence ","Kacura "]
with open(r"Blank.txt","w",encoding="utf-8") as myio:
myio.writelines(s) #不会自动的换行
ps: para resolver el problema de la consola confusa, configure la codificación en un formato unificado.
Ejercicio 2: lectura de archivos
- read ([size])
lee los caracteres de tamaño del archivo y lo devuelve como resultado. Si no hay ningún parámetro de tamaño, se lee todo el archivo.
Leer hasta el final del archivo devolverá una cadena vacía. - readline ()
lee una línea de contenido y la devuelve como resultado. Leer hasta el final del archivo devolverá una cadena vacía. - En el
archivo de texto readlines () , cada línea se almacena en la lista como una cadena y la lista se devuelve
s = ["Clichong ","Lawrence ","Kacura "]
with open(r"Birthday.txt","r",encoding="utf-8") as myio:
print(myio.read(4),end="\n\n")
myio.seek(0)
print(myio.readline(),end="\n\n")
myio.seek(0)
print(myio.readlines(),end="\n\n")
myio.seek(0)
print(myio.read())
Ejercicio 3: agregue un número de línea al final de cada línea del archivo de texto
with open(r"Blank.txt","r",encoding="utf-8") as myio:
line = myio.readlines()
print(list(enumerate(line))) #其中enumerate函数可以为每一行在开头添加一个行号
myline = [str(information).rstrip()+" #"+str(number+1)+"\n" for number,information in enumerate(line)]
print(myline)
with open(r"Blank.txt","w",encoding="utf-8") as myio:
myio.writelines(myline)
Número de línea agregado
Ejercicio 4: copiar un archivo
versión inicial:
with open(r"Birthday.txt","r",encoding="utf-8") as myfile:
with open(r"CopyBirthday.txt","w",encoding="utf-8") as mycopyfile:
while True:
if myfile.readline(): #由于判断的时候已经读取了文件会造成文件指针的偏移,会丢包
mycopyfile.write(myfile.readline())
else:
break
Versión mejorada:
with open(r"test.txt","r",encoding="utf-8") as myfile:
with open(r"copytest.txt","w",encoding="utf-8") as mycopyfile:
while True:
line = myfile.readline() #指读取一次,不会丢包
if line:
mycopyfile.write(line)
else:
break
Como puede ver, el contenido de los dos archivos es exactamente el mismo
Ejercicio 5: serialización y deserialización
Necesitamos guardar los "datos del bloque de memoria" en el disco duro o transferirlos a otras computadoras a través de la red. En este momento, se necesita "serialización y deserialización de objetos". El mecanismo de serialización de objetos se usa ampliamente en sistemas distribuidos y paralelos.
pickle.dump (obj, archivo) obj es el objeto que se va a serializar, el archivo se refiere al archivo almacenado
pickle.load (archivo) lee los datos del archivo y los deserializa en un objeto
import pickle
a1 = "Clichong"
a2 = "Lawrence"
a3 = "Kacura"
with open(r"Blank.txt","wb+") as myfile: #只能是二进制的,而且不能指定编码形式
pickle.dump(a1,myfile)
pickle.dump(a2,myfile)
pickle.dump(a3,myfile)
myfile.seek(0)
print(myfile.read())
with open(r"Blank.txt","rb") as myfile:
b1 = pickle.load(myfile)
b2 = pickle.load(myfile)
b3 = pickle.load(myfile)
print(b1,b2,b3)
Ejercicio 6: Operación de archivos CSV
csv (valores separados por comas) es un formato de texto separado por comas, comúnmente utilizado para el intercambio de datos, la importación y exportación de datos de bases de datos y archivos de Excel.
import csv
info = ['id','name','age','salary']
infos = [['1005','Petty','41','32000'],['1006','Kitty','22','10000']]
with open(r"csvfile.csv","w",encoding="utf-8") as myfile:
writebuf = csv.writer(myfile)
writebuf.writerow(info) #写入一行(标题)
writebuf.writerows(infos) #写入多行(数据)
with open(r"csvfile.csv","r",encoding="utf-8") as myfile:
readbuf = csv.reader(myfile) #创建 csv 对象,它是一个包含所有数据的列表,每一行为一个元素
# headers = next(readbuf) #获得列表对象,包含标题行的信息
print(list(readbuf))
myfile.seek(0)
linetxt = [id+"-"+name+"-"+age+"-"+salary+"\n" for id,name,age,salary in readbuf]
with open(r"Blank.txt", "w", encoding="utf-8") as mywritefile:
mywritefile.writelines(linetxt)
Leer y reescribir datos con éxito:
Ejercicio 7: operaciones de directorio
import os
import os.path
print("#当前工作路径是",os.getcwd())
#os.mkdir("testdir") #只能创建一次,若已创建则报错
#os.makedirs("音乐/刘德华") #一次可以创建多个目录
print("#是否是绝对路径",os.path.isabs("myfile06.py"))
print("#是否是目录文件",os.path.isdir("myfile06.py"))
print("#是否是文件",os.path.isfile("myfile06.py"))
print("#文件是否存在",os.path.exists("myfile06.py"))
print("#文件的大小是",os.path.getsize("myfile06.py"))
print("#返回文件的最后访问时间",os.path.getatime("myfile06.py")) #返回文件的最后访问时间
print("#返回文件的最后创建时间",os.path.getctime("myfile06.py")) #返回文件的最后修改时间
print("#返回文件的最后修改时间",os.path.getmtime("myfile06.py"))
print("#直接返回路径",os.path.abspath("myfile06.py")) #直接返回路径
print("#返回目录路劲",os.path.dirname("E:\PyCharm\workspace\myIO\myfile06.py")) #返回目录路劲
print("#对路径进行切割",os.path.split(os.path.abspath("myfile06.py")))
print("#对路径切割出文件的拓展名",os.path.splitext(os.path.abspath("myfile06.py")))
s = "D:\\"
print("#对多个目录名进行连接形成绝对路径",os.path.join(s,"音乐","刘德华","忘情水.mp4"))
Ejercicio 8: enumere todos los archivos .py en el directorio especificado y genere el nombre del archivo
Método 1: función personalizada
import os
import os.path
os.chdir("E:\PyCharm\workspace") #更改当前的工作目录
print(os.getcwd())
def FileList(dirname): #传入一个目录名,就可以打印出目录下的全部.py文件
if not os.path.isdir(dirname): #判断是否为目录文件
print("Error! Not Dir!")
return
else:
mylist = os.listdir(os.path.abspath(dirname)) #将所有的文件输出一个列表中方便处理
print(mylist)
for file in mylist:
filename,filetext = os.path.splitext(file) #python的特殊语法,真是太简单了
if filetext == ".py":
print(file)
FileList("myIO")
Como puede ver, todos los archivos .py se generan normalmente
Método 2: use extremos con
Este método usa una función de termina con la cadena para determinar el carácter al final
for file in os.listdir():
if file.endswith("py"): #灵活的使用了字符串的函数
print(file)
Método 3: inferencial (una línea de código)
El uso flexible de la deducción puede hacer que el código sea conciso
mypyfile = [pyfile for pyfile in os.listdir() if pyfile.endswith("py")]
Como se muestra en la figura, se puede generar normalmente
Ejercicio 9: Prueba de uso de la función de recorrido de caminata
Método os.walk (): devuelve una tupla de 3 elementos, (ruta de directorio, nombres de directorio, nombres de archivo),
- dirpath: para enumerar la ruta del directorio especificado
- dirnames: todas las carpetas del directorio
- nombres de archivo: todos los archivos en el directorio
#测试walk函数
import os
import os.path
#os.chdir("E:\PyCharm\workspace")
print(os.getcwd())
Allfile = os.walk(os.getcwd())
for dirpath,dirnames,filenames in Allfile:
for dir in dirnames:
print(os.path.join(dirpath,dir))
for file in filenames:
print(os.path.join(dirpath,file))
# print(dirpath)
# print(dirnames)
# print(filenames)
Ejercicio 10: prueba la copia y compresión de módulos shutil
Prueba de copia
#测试shutil模块
import shutil
import os
print(os.getcwd())
os.chdir("E:\PyCharm\workspace\myIO\音乐\刘德华")
shutil.copy("note.txt","copynote.txt")
os.chdir("E:\PyCharm\workspace\myIO")
#不要忽视.这个符号,要写得完整为.txt,.html
shutil.copytree("音乐\刘德华","电影",ignore=shutil.ignore_patterns(".txt",".html"))
Antes de
correr: Después de correr:
Test de comprensión
- El primer método de compresión
#把目录下:音乐/刘德华下的全部内容压缩到目录:电影/歌手 中去,格式为zip格式
shutil.make_archive("电影/歌手","zip","音乐/刘德华")
- El segundo método de compresión
import shutil
import zipfile
#shutil.make_archive("电影/歌手","zip","音乐/刘德华")
myfile = zipfile.ZipFile("音乐/Clichong.zip","w") #压缩包存放位置
myfile.write("电影/copynote.txt") #往压缩文件夹中添加的数据
myfile.write("电影/note.txt")
myfile.close()
Descomprimir prueba
import shutil
import zipfile
#shutil.make_archive("电影/歌手","zip","音乐/刘德华")
'''''''''
myfile = zipfile.ZipFile("音乐/Clichong.zip","w")
myfile.write("电影/copynote.txt")
myfile.write("电影/note.txt")
myfile.close()
'''''''''
myfile2 = zipfile.ZipFile("音乐/Clichong.zip","r") #要解压缩的文件为Clichong.zip
myfile2.extractall("音乐") #解压缩的目录
myfile2.close()
Ejercicio 11: use un método recursivo para recorrer todo el directorio e imprimirlo como un árbol
#递归遍历目录
import os
def DirNameSearch(dirpassname,level):
allname = os.listdir(dirpassname)
for dirname in allname:
wholefilename = os.path.join(dirpassname, dirname)
if os.path.isdir(wholefilename):
DirNameSearch(wholefilename,level+1)
else:
print("|_"+"___"*level,wholefilename)
DirNameSearch("音乐",0)
La estructura del directorio es la siguiente:
Resultados del recorrido : Probémoslo
con el directorio completo:
DirNameSearch("E:\PyCharm\workspace\myIO",0)
Todavía se puede atravesar mejor