[Conceptos básicos de desarrollo del rastreador de Python ③] Conceptos básicos de Python (resumen de los métodos de operación de archivos)

Recordatorio amistoso : dado que los artículos de esta columna están sesgados hacia los rastreadores, es imposible cubrir todo sobre python. Aquí solo nos centramos en los puntos clave. Si cree que hay algo que no se ha mencionado, bienvenido a agregar ~

Recomendaciones anteriores :
[Conceptos básicos de desarrollo de rastreadores de Python ①] Conceptos básicos de Python (variables y convenciones de nomenclatura)
[Conceptos básicos de desarrollo de rastreadores de Python ②] Conceptos básicos de Python (expresiones regulares)
El artículo anterior ya ha hablado sobre expresiones regulares de Python, Python en rastreadores La lectura y escritura de datos son inevitablemente involucrado en el desarrollo ¡Echemos un vistazo a una serie de operaciones de archivos hoy!



1 Codificación de archivos

¿Qué es la codificación de archivos?

  • La codificación de archivos se refiere a la forma en que el texto o los datos binarios se almacenan en archivos de computadora para que el tipo de datos, el conjunto de caracteres y el formato se identifiquen correctamente cuando se lee y escribe el archivo.

  • Para los archivos de texto , la codificación del archivo determina cómo se codifican los caracteres en una secuencia de bytes. Las codificaciones comunes de archivos de texto incluyen ASCII, UTF-8, GB2312, GBK, BIG-5 , etc.

  • Para archivos binarios , la codificación de archivos define las reglas y convenciones para representar datos en un formato particular. Por ejemplo, los archivos de imagen PNG utilizan la especificación de codificación basada en " mapa de bits sin comprimir " para guardar datos de píxeles, mientras que los archivos PDF se codifican con el lenguaje PDF desarrollado por Adobe Corporation.

¿Por qué utilizar la codificación de archivos?

  • La codificación de archivos garantiza la exactitud de los datos : los diferentes conjuntos de caracteres y formatos pueden codificarse de manera diferente, y la falla en la codificación puede resultar en corrupción y errores de formato del contenido de texto o datos binarios.
  • La codificación de archivos puede mejorar la portabilidad : los diferentes sistemas operativos y software admiten diferentes juegos de caracteres y codificaciones. Al almacenar, leer y procesar el mismo archivo, la codificación correcta de archivos puede garantizar que los datos se puedan transferir entre diferentes plataformas y aplicaciones. Compatibilidad e interoperabilidad.
  • La codificación de archivos puede ahorrar espacio de almacenamiento : algunos esquemas de codificación tienen características de compresión, que pueden minimizar el espacio ocupado por los datos durante la transmisión del disco duro y la red, mejorando así la eficiencia del trabajo y ahorrando costos de almacenamiento.

2 Apertura, cierre, lectura, escritura y anexo de expedientes

En Python, para realizar operaciones con archivos, debe usar la función integrada open()para abrir el archivo y devolver un objeto de archivo . Al mismo tiempo, para evitar el desperdicio de recursos y la corrupción de datos, también es necesario utilizar close()métodos para cerrar archivos explícitamente . Para leer y escribir el contenido del archivo, puede usar los operadores de lectura y escritura relevantes.

Abrir archivo :
use open()la función para abrir el archivo, que acepta dos parámetros: la ruta del archivo y el modo de apertura ( "r"significa lectura, "w"significa escritura, "a"significa agregar), por ejemplo:

f = open("file.txt", "r") # 以只读模式打开指定文件

Cerrar archivo :
use close()el método para cerrar el archivo abierto, por ejemplo:

f.close() # 关闭文件

Leer archivo :
use read(), readline()o readlines()método para leer el contenido del archivo, por ejemplo:

text = f.read() # 一次性读取整个文件内容到字符串中
line = f.readline() # 逐行读取文件内容(每次读取一行)
lines = f.readlines() # 返回所有行的列表

readlines()El método se usa principalmente en foro whileloop

Escribir en archivo :
use write()el método para escribir contenido en el archivo, por ejemplo:

f.write("hello world")

Una vez completadas las operaciones de lectura y escritura del archivo, es necesario liberar los recursos ocupados a tiempo y guardar el objeto de memoria en el disco . Por lo tanto, se recomienda utilizar una estructura de declaración para las operaciones de archivos withy cerrar automáticamente el archivo después de ejecutar el código , por ejemplo:

# 自动关闭文件并将文件内容写入到磁盘中
with open("file.txt", "w") as f:
    f.write("hello world")

Agregar operación :
abrir a través del modo a, por ejemplo:

f = open('python.txt', 'a')
  • Si el archivo no existe, se creará el archivo
  • La existencia del expediente se adjuntará al expediente al final

2.1 Resumen de la operación

funcionar Función
objeto de archivo = abrir (archivo, modo, codificación) Abra un archivo para obtener un objeto de archivo ('r' para leer, 'w' para escribir, 'a' para agregar)
archivo objeto.leer(num) Lea los bytes de longitud especificados (no especifique num para leer todos los archivos)
archivo objeto.readline() leer una línea
archivo objeto.readlines() Leer todas las líneas y obtener una lista
para línea en objeto de archivo para la línea de archivo de bucle, se obtiene una línea de datos en un bucle
archivo objeto.close() cerrar objeto de archivo
con abierto() como f Abra el archivo a través de la sintaxis abierta, que se puede cerrar automáticamente

3 módulos de uso común para operaciones con archivos: módulo os

Los módulos integrados de Python osproporcionan funciones para interactuar con el sistema operativo y manipular archivos y directorios relacionados.

Los de uso común incluyen los siguientes:

os.chdir(ruta) :
cambia el directorio de trabajo actual al directorio especificado, por ejemplo:

import os

# 改变当前工作目录到 /user/newdir
os.chdir("/user/newdir")

os.getcwd() :
devuelve el nombre de cadena del directorio de trabajo actual, por ejemplo:

import os

# 输出当前工作目录
print(os.getcwd())

os.listdir([ruta]) :
devuelve una lista de todas las carpetas y nombres de archivos en la ruta especificada, por ejemplo:

import os

# 返回当前工作目录下的所有文件夹和文件
print(os.listdir())

os.mkdir(ruta) :
crea un directorio de un solo nivel. Si ya existe, se lanza una excepción, por ejemplo:

import os

# 创建/创建目录
os.mkdir("newdir")

os.makedirs(ruta) :
Crea árboles de directorios recursivamente. Si ya existe, se lanza una excepción, por ejemplo:

import os

# 递归创建新目录if it doesn't already exist
os.makedirs("newdir/subdir")

os.remove(ruta) :
elimina un archivo, por ejemplo:

import os

# 删除一个文件
os.remove("file.txt")

os.rmdir(ruta) :
Elimina un directorio de un solo nivel. Si el directorio no está vacío, no se puede eliminar, por ejemplo:

import os

# 删除目录"dirname"(注:目录必须是空的,否则无法删除)
os.rmdir("dirname")

os.rename(src, dst) :
renombrar/mover un archivo o directorio, por ejemplo:

import os

# 将文件重命名(可用于移动文件)
os.rename("oldname.txt", "newname.txt")

4 módulos comunes para operaciones con archivos: módulo json

¿Qué es json y su aplicación en el rastreador web de python?

El módulo json es un módulo integrado en Python que proporciona una manera fácil de trabajar con datos JSON. JSON (Notación de objetos de JavaScript) es un formato de datos liviano que a menudo se usa para enviar datos desde un servidor a una página web, o para pasar datos de un programa a otro .
JSON se usa ampliamente en el rastreo web. Los rastreadores web pueden rastrear datos de sitios web, convertir estos datos en formato JSON y luego analizarlos y procesarlos . El formato JSON es simple y claro, fácil de analizar, procesar y transmitir , por lo que es muy adecuado para su uso en rastreadores web.

  1. json.dumps()

Esta función se utiliza para convertir un objeto de Python en una cadena en formato JSON . objLos argumentos pueden ser diccionarios, listas, tuplas, enteros, flotantes, booleanos y Noneotros objetos de Python. skipkeys, ensure_ascii, check_circular, allow_nan, cls, default, y los parámetros se pueden usar para configurar varias opciones y parámetros durante la conversión indent.separatorssort_keys

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False)

La definición de esta función es como se muestra arriba. Aquí hay un ejemplo para demostrar el uso de esta función:

import requests
import json

url = 'https://jsonplaceholder.typicode.com/todos/1'
r = requests.get(url)
data = r.json()

# 将字典转化为JSON字符串并输出
data_json = json.dumps(data)
print(data_json)

# 将JSON字符串写入文件
with open('data.json', 'w') as f:
    json.dump(data, f)

producción:

{
    
    "userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}

En el ejemplo anterior, solicitamos un todolist APIdato, lo convertimos en una cadena en JSONformato y lo enviamos a la terminal. Luego usamos json.dump()los datos del diccionario para escribirlos data.jsonen el archivo para lograr la persistencia de los datos.

  1. json.loads()

Esta función se utiliza para convertir una cadena en formato JSON en un objeto de Python . El parámetro es una cadena en formato JSON que sdebe analizarse. encodingEl parámetro se usa para establecer el método de codificación de la cadena. Parámetros como cls, object_hook, parse_float, parse_inty se pueden usar para establecer varias opciones y parámetros durante el análisis.parse_constantobject_pairs_hook

json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None)

La definición de esta función es como se muestra arriba. Aquí hay un ejemplo para demostrar el uso de esta función:

# 定义如下 JSON 格式字符串
json_str = '{"name": "Alice", "age": 25, "isStudent": true}'
# 把这个字符串转成 Python 字典类型
data = json.loads(json_str)
print(type(data))
print(data)

producción:

<class 'dict'>
{
    
    'name': 'Alice', 'age': 25, 'isStudent': True}

En este ejemplo, json_stres una cadena con formato JSON, que json.loads()analizamos data. De esta forma, los datos JSON se pueden procesar y manipular de manera conveniente.

Cabe señalar que si el formato de datos JSON es incorrecto o no se puede analizar, json.loads()el método generará una excepción, lo que requiere un manejo de excepciones. Al mismo tiempo, al usar json.loads()el método, también es necesario asegurarse de que los datos JSON sean legales; de lo contrario, se producirán problemas como fallas en el análisis de datos y fallas del programa.


5 módulos comunes para la operación de archivos y el procesamiento de datos: módulo pandas

La biblioteca Pandas es una herramienta de procesamiento de datos de código abierto y fácil de usar. Es una biblioteca de extensión para el lenguaje de programación Python. Proporciona una estructura de datos rápida, flexible y expresiva para el lenguaje de programación Python. Es simple y potente. Es una herramienta de ciencia de datos y análisis de datos, una de las bibliotecas de uso común.

5.1 Tipos de datos proporcionados por pandas

  1. Serie

La serie es un objeto de matriz unidimensional , similar a una matriz numpy con índices . Puede contener cualquier tipo de datos, como enteros, flotantes, cadenas, objetos de Python, etc. La serie está orientada a etiquetas y se puede recuperar usando tags .

Ejemplo de código 1 :

import pandas as pd
#Series创建方式1:
#由列表或numpy数组创建
s1 = pd.Series(data = np.random.randint(0,10,size=5), index = list('abcde'), name = 'str1')
print(s1)

producción:

a    4
b    2
c    6
d    8
e    7
Name: str1, dtype: int32

Ejemplo de código 2 :

#方式2:
#由字典创建
s2 = pd.Series({
    
    'A':80,'B':30})
print(s2)
#key:行索引,value:数值

producción:

A    80
B    30
dtype: int64
  1. Marco de datos

DataFrame es una estructura de datos tabular bidimensional con etiquetas de eje (filas y columnas). DataFrame puede considerarse como un diccionario compuesto por múltiples Series, que comparten el mismo índice e incorporan operaciones similares a las tablas SQL.

Ejemplo de código :

import pandas as pd

# 创建DataFrame
data = {
    
    
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'gender': ['female', 'male', 'male']
}
df = pd.DataFrame(data)
# 显示前几行数据
print(df.head())
# 筛选特定列
print(df['name'])
# 根据条件筛选行
print(df[df['age'] > 30])
# 添加新列
df['income'] = [5000, 6000, 7000]
print(df)

producción:

      name  age  gender
0    Alice   25  female
1      Bob   30    male
2  Charlie   35    male
0      Alice
1        Bob
2    Charlie
Name: name, dtype: object
      name  age gender
2  Charlie   35   male
      name  age  gender  income
0    Alice   25  female    5000
1      Bob   30    male    6000
2  Charlie   35    male    7000

5.2 Potentes funciones de procesamiento de datos proporcionadas por pandas

Pandas también proporciona potentes funciones de preprocesamiento, análisis y modelado de datos.

  1. Se admiten múltiples formatos de entrada y salida de datos, como CSV, Excel, base de datos SQL, etc .:

Primero demuestre cómo leer y manipular archivos CSV:

'''
假定我们有一个名为“data.csv”的CSV文件,
其中包含有关城市、日期、天气和温度的数据。
'''
import pandas as pd

# 从CSV文件中读取数据
df = pd.read_csv('data.csv')
# 查看数据前5行
print(df.head())
# 查看数据信息
print(df.info())
# 对数据进行聚合
mean_temp = df.groupby('city')['temperature'].mean()
print(mean_temp)
  • pd.read_csv()es la función utilizada para leer el archivo CSV
  • head()Función para ver las primeras 5 filas de un archivo CSV
  • info()Funciones para mostrar detalles como tipos de datos y valores faltantes
  • groupby()Función para agrupar datos por columnas especificadas
  • mean()La función calcula el valor promedio de cada conjunto de datos

Aquí se explica cómo leer y manipular archivos de Excel con Pandas:

'''
以读取一个名为“data.xlsx”的Excel文件为例,
里面包含“Sheet1”工作表,
其中记录了城市、日期、天气和温度的信息。
'''
import pandas as pd

# 从Excel文件中读取工作表数据
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 查看数据前5行
print(df.head())
# 查看数据信息
print(df.info())
# 对数据进行聚合
mean_temp = df.groupby('city')['temperature'].mean()
print(mean_temp)
  • pd.read_excel()es una función para leer un archivo de Excel y debe especificar un nombre o índice de hoja de trabajo.
  • Otras partes son las mismas que las operaciones del archivo CSV.

El siguiente es el código de muestra para procesar la base de datos SQL:

'''
假设我们有一个MySQL数据库,
其中包含一个名为“weather”的表,
该表记录了城市、日期、天气和温度等信息。
'''
import pandas as pd
import mysql.connector

# 连接到 MySQL 数据库
con = mysql.connector.connect(user='root', password='password123',
                              host='localhost',
                              database='mydatabase')

# 从 MySQL 中选择对应表中的数据
query = "SELECT city, date, weather, temperature FROM weather"
df = pd.read_sql(query, con)

# 查看数据前5行
print(df.head())
# 查看数据信息
print(df.info())
# 对数据进行聚合
mean_temp = df.groupby('city')['temperature'].mean()
print(mean_temp)

# 关闭连接
con.close()
  • mysql.connector.connect()Es una función que se utiliza para conectarse a la base de datos MySQL, y se deben proporcionar parámetros como el nombre de usuario, la contraseña, la dirección del host y el nombre de la base de datos.
  • pd.read_sql()El método acepta una consulta SQL y devuelve una DataFrame.
  • Otras partes son las mismas que las operaciones del archivo CSV.
  1. Limpieza de datos, incluido el manejo de valores perdidos, valores atípicos, etc .:

Los datos se pueden limpiar fácilmente con la biblioteca de Pandas. A continuación, se presentará cómo usar la biblioteca de Pandas para lidiar con métodos comunes para valores faltantes y valores atípicos en los datos.
En la vida real, a menudo faltan valores en los datos. Estos valores faltantes pueden deberse a un error humano o no se pueden obtener los datos correspondientes por algún motivo.

Ejemplo de código :

'''
假设我们有一个DataFrame包含以下三列:
日期、城市和温度,其中部分数据是缺失的:
'''
import numpy as np
import pandas as pd

# 创建 DataFrame,模拟数据中存在缺失值
dates = pd.date_range('2023-01-01', '2023-01-10')
df = pd.DataFrame({
    
    'date': dates,
                   'city': ['Beijing']*5 + ['Shanghai']*5,
                   'temperature': [np.nan, 20, 21, np.nan, 22, np.nan, np.nan, 19, 23, 24]})
print(df)

producción:

        date      city  temperature
0 2023-01-01   Beijing          NaN
1 2023-01-02   Beijing         20.0
2 2023-01-03   Beijing         21.0
3 2023-01-04   Beijing          NaN
4 2023-01-05   Beijing         22.0
5 2023-01-06  Shanghai          NaN
6 2023-01-07  Shanghai          NaN
7 2023-01-08  Shanghai         19.0
8 2023-01-09  Shanghai         23.0
9 2023-01-10  Shanghai         24.0

Se puede ver que hay muchos valores faltantes involucrados en los datos. Aquí se explica cómo usar la biblioteca de Pandas para manejar los valores faltantes en sus datos:

  • Primero verifique los valores faltantes
# 检查数据是否存在缺失值
print(df.isnull().sum())

Resultado de salida:

date           0
city           0
temperature    4
dtype: int64

La .isnull()función se utiliza para comprobar si faltan valores en el DataFrame y devolver si el valor de la posición está vacío True; de lo contrario, devolver False. La función .sum()se utiliza para contar el número de valores que faltan en cada columna.

  • En segundo lugar, para eliminar los valores que faltan
# 删除 DataFrame 中含有缺失值的行
df_dropna = df.dropna()
print(df_dropna)

producción:

        date     city  temperature
1 2023-01-02  Beijing         20.0
2 2023-01-03  Beijing         21.0
4 2023-01-05  Beijing         22.0
8 2023-01-09  Shanghai         23.0
9 2023-01-10  Shanghai         24.0

Aquí se usa una función .dropna()para eliminar filas con valores faltantes en un DataFrame. .dropna()De forma predeterminada, la función elimina la fila correspondiente siempre que falten valores, y el método de eliminación también se puede configurar a través de parámetros, como eliminar por columna, conservar al menos N valores no nulos, etc.

  1. Además, la biblioteca pandas también tiene potentes funciones de transformación de datos , que incluyen remuestreo, agregación, fusión, agrupación, llenado, etc.; funciones de análisis y procesamiento de series temporales ; visualización de datos y soporte para dibujar a través de la biblioteca Matplotlib.

Por ejemplo : utilizando la biblioteca pandas combinada con matplotlib y sklearn, se obtuvo el mapa de resultados del algoritmo de agrupamiento K-Means
inserte la descripción de la imagen aquí


6 Módulo especial para procesar archivos CSV—módulo csv

Trabajar con archivos CSV en Python es una tarea común. Los archivos CSV almacenan datos en formato de valores separados por comas (Comma-Separated Values). Además del módulo pandas presentado anteriormente, el módulo csv también es un módulo más adecuado. Presentemos el uso simple del módulo csv

  1. Leer archivo CSV :

Para leer archivos CSV, puede usar los módulos integrados de Python csv. Primero debe abrir el archivo CSV y pasarlo a csv.reader()la función como un objeto de archivo.

Ejemplo de código :

import csv

with open('filename.csv', newline='') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in reader:
        print(', '.join(row))

En el código anterior, usamos Python integrado with open()para abrir el archivo CSV y especificar parámetros newline=''para evitar que aparezcan líneas en blanco redundantes. Luego, usamos csv.reader()el método y pasamos el objeto del archivo CSV. Esta ejecución devolverá una lista iterable de actividades (lista). Puede acceder a cada línea con una declaración de bucle, o leer el texto línea por línea (la última línea está vacía) y usar opciones como delimitedy quote characterspara controlar los separadores de línea y los caracteres de comillas.

  1. Escribir en el archivo CSV :

Para escribir en un archivo CSV, puede usar la clase r csvdel módulo integrado de Python csv.write. Esta clase proporciona writerow()métodos que le permiten escribir una línea a la vez.

Ejemplo de código 1 :

import csv

with open('filename.csv', mode='w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['John Smith', 'Accounting', 'November'])

En el código anterior, usamos Python integrado with open()para abrir el archivo, especificar los parámetros 'Mode'y pasarlos a csv.writer()la función. A continuación, pasamos los datos que deben escribirse en el archivo CSV como una lista y usamos writerow()el método para escribir la fila de datos en el archivo CSV.

Ejemplo de código 2 (escrito como un diccionario) :

import csv

data = [
    {
    
    'Name': 'John', 'Age': 29, 'Country': 'USA'},
    {
    
    'Name': 'Mary', 'Age': 22, 'Country': 'Canada'},
    {
    
    'Name': 'Tom', 'Age': 31, 'Country': 'UK'}
]

with open('people.csv', mode='w', newline='') as file:
    fieldnames = ['Name', 'Age', 'Country']
    writer = csv.DictWriter(file, fieldnames=fieldnames)

    writer.writeheader()
    for person in data:
        writer.writerow(person)

En este ejemplo, hemos creado una lista de diccionarios con detalles de 3 personas . Luego abrimos y creamos un "people.csv"archivo CSV llamado y usamos DictWriter()funciones y fieldnamesparámetros para especificar los campos para escribir en el archivo CSV. Finalmente, writerow()escribimos cada diccionario en un archivo CSV a través de una función. Las funciones writeheader()se escriben automáticamente en el encabezado de la tabla.

Nota : Además, también podemos usar las operaciones de lectura y escritura de archivos presentadas al principio para seleccionar 'a' para escritura adicional.

Supongo que te gusta

Origin blog.csdn.net/z135733/article/details/131136411
Recomendado
Clasificación