Operación de archivo de ejercicio pequeño de Python

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()

Inserte la descripción de la imagen aquí
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()

Inserte la descripción de la imagen aquí
Ú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)		#不会自动的换行

Inserte la descripción de la imagen aquí
ps: para resolver el problema de la consola confusa, configure la codificación en un formato unificado.
Inserte la descripción de la imagen aquí

Ejercicio 2: lectura de archivos
  1. 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.
  2. readline ()
    lee una línea de contenido y la devuelve como resultado. Leer hasta el final del archivo devolverá una cadena vacía.
  3. 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())

Inserte la descripción de la imagen aquí

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)

Inserte la descripción de la imagen aquí
Número de línea agregado
Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

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)

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

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:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

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"))

Inserte la descripción de la imagen aquí

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")

Inserte la descripción de la imagen aquí
Como puede ver, todos los archivos .py se generan normalmente
Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí

for file in os.listdir():
    if file.endswith("py"):	#灵活的使用了字符串的函数
        print(file)

Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí

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)

Inserte la descripción de la imagen aquí

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
Inserte la descripción de la imagen aquí
correr: Después de correr:
Inserte la descripción de la imagen aquí

Test de comprensión
  • El primer método de compresión
#把目录下:音乐/刘德华下的全部内容压缩到目录:电影/歌手 中去,格式为zip格式
 shutil.make_archive("电影/歌手","zip","音乐/刘德华")	

Inserte la descripción de la imagen aquí

  • 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()

Inserte la descripción de la imagen aquí

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()


Inserte la descripción de la imagen aquí

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:
Inserte la descripción de la imagen aquí
Resultados del recorrido : Probémoslo
Inserte la descripción de la imagen aquí
con el directorio completo:

DirNameSearch("E:\PyCharm\workspace\myIO",0)

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Todavía se puede atravesar mejor

Supongo que te gusta

Origin blog.csdn.net/weixin_44751294/article/details/109732684
Recomendado
Clasificación