una txt lista linea leer importar especifica escribir ejercicios datos configuracion como binarios archivos archivo python python-3.x ini

txt - escribir una lista en un archivo python



¿Cómo leer y escribir archivos INI con Python3? (5)

Aquí hay un ejemplo completo de lectura, actualización y escritura.

Archivo de entrada, test.ini

[section_a] string_val = hello bool_val = false int_val = 11 pi_val = 3.14

Código de trabajo.

try: from configparser import ConfigParser except ImportError: from ConfigParser import ConfigParser # ver. < 3.0 # instantiate config = ConfigParser() # parse existing file config.read(''test.ini'') # read values from a section string_val = config.get(''section_a'', ''string_val'') bool_val = config.getboolean(''section_a'', ''bool_val'') int_val = config.getint(''section_a'', ''int_val'') float_val = config.getfloat(''section_a'', ''pi_val'') # update existing value config.set(''section_a'', ''string_val'', ''world'') # add a new section and some values config.add_section(''section_b'') config.set(''section_b'', ''meal_val'', ''spam'') config.set(''section_b'', ''not_found_val'', 404) # save to a file with open(''test_update.ini'', ''w'') as configfile: config.write(configfile)

Archivo de salida, test_update.ini

[section_a] string_val = world bool_val = false int_val = 11 pi_val = 3.14 [section_b] meal_val = spam not_found_val = 404

El archivo de entrada original permanece intacto.

Necesito leer, escribir y crear un archivo INI con Python3.

FILE.INI

default_path = "/path/name/" default_file = "file.txt"

Archivo de Python:

# read file and if not exists ini = iniFile( ''FILE.INI'' ) # Get and Print Config Line "default_path" getLine = ini.default_path # Print (string)/path/name print getLine # Append new line and if exists edit this line ini.append( ''default_path'' , ''var/shared/'' ) ini.append( ''default_message'' , ''Hey! help me!!'' )

ACTUALIZAR ARCHIVO.INI

default_path = "var/shared/" default_file = "file.txt" default_message = "Hey! help me!!"


El ConfigParser estándar normalmente requiere acceso a través de config[''section_name''][''key''] , que no es divertido. Una pequeña modificación puede proporcionar acceso a los atributos:

class AttrDict(dict): def __init__(self, *args, **kwargs): super(AttrDict, self).__init__(*args, **kwargs) self.__dict__ = self

AttrDict es una clase derivada de dict que permite el acceso mediante claves de diccionario y acceso a atributos: eso significa que ax is a[''x'']

Podemos usar esta clase en ConfigParser :

config = configparser.ConfigParser(dict_type=AttrDict) config.read(''application.ini'')

y ahora tenemos application.ini con:

[general] key = value

como

>>> config._sections.general.key ''value''


Esto puede ser algo para empezar:

import configparser config = configparser.ConfigParser() config.read(''FILE.INI'') print(config[''DEFAULT''][''path'']) # -> "/path/name/" config[''DEFAULT''][''path''] = ''/var/shared/'' # update config[''DEFAULT''][''default_message''] = ''Hey! help me!!'' # create with open(''FILE.INI'', ''w'') as configfile: # save config.write(configfile)

Puede encontrar más en la documentación oficial del configurador .



ConfigObj es una buena alternativa a ConfigParser que ofrece mucha más flexibilidad:

  • Secciones anidadas (subsecciones), a cualquier nivel
  • Valores de lista
  • Múltiples valores de línea
  • Interpolación de cadenas (sustitución)
  • Integrado con un poderoso sistema de validación que incluye secciones automáticas de verificación / conversión de tipos repetidas y permite valores predeterminados
  • Al escribir archivos de configuración, ConfigObj conserva todos los comentarios y el orden de miembros y secciones
  • Muchos métodos y opciones útiles para trabajar con archivos de configuración (como el método de "recarga")
  • Soporte total Unicode

Tiene algunas desventajas:

  • No puede establecer el delimitador, tiene que ser = ... ( solicitud de extracción )
  • No puede tener valores vacíos, así que puede, pero se ven como "me gusta": fuabr = lugar de solo fubar que se ve raro e incorrecto.