[RESOLU] Manipulation de fichier en python

Python est le langage de prédilection du Raspberry Pi

Modérateurs : Francois, Manfraid

Répondre
Avatar du membre
EVOTk
Modérateur
Messages : 802
Enregistré le : sam. 20 sept. 2014 02:36

[RESOLU] Manipulation de fichier en python

Message par EVOTk » sam. 29 nov. 2014 02:30

Bonsoir,

Pour mon projet, je souhaiterai pouvoir dans un fichier stocker des valeurs de températures.
Pas de probleme la dessus. Ni pour les recupérer, grace a "readlines()"

Par contre, je souhaiterai au besoin ne modifier qu'une ligne de mon fichier texte au travers de mon programme, et visiblement se n'est pas possible de reecrire qu'une seul ligne d'un fichier .txt

C'est le cas ?

Dans se cas la seule solution est de lire/copier mon fichier, changer la valeur voulue et re-ecrire le fichier ?
Modifié en dernier par EVOTk le jeu. 11 déc. 2014 18:14, modifié 1 fois.
NAS : DS3615xs Xpenology - 8To + 2x 3To + 2x 4To WD Red - APC Back-UPS Pro 900
Imprimante 3D : Dagoma DiscoEasy 200
Surveillance Réseau : Smokeping sur Rasp. B / Raspbian
Arcade : Raspberry Pi 3 sous RecalBox

Avatar du membre
vague nerd
Modérateur
Messages : 1469
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Manipulation de fichier en python

Message par vague nerd » sam. 29 nov. 2014 08:55

Bonjour.

En java, pas de problème. Mais j'imagine que tu parles de python.
A prioris, ce n'est pas possible. Pour simplifier ton écriture/réécriture, creuse ce qui suit.

Tu peux accéder à un endroit précis d'un fichier sans avoir à lire le fichier entier (cas de gros fichiers):

Code : Tout sélectionner

>>> f = open("bonnie.txt", "wb")
>>> f.write("My Bonnie lies over the ocean.")
>>> f.close()
>>> f.open("bonnie.txt", "r+b")
>>> mm = mmap(f.fileno(), 0)
>>> print mm[3:9]
Bonnie
On peux aussi modifier l'objet mmap

Code : Tout sélectionner

>>> print mm[24:]
ocean.
>>> mm[24:] = "sea.  "
>>> print mm[:]
My Bonnie lies over the sea.  
Edit : j'ai oublié de citer ma source. Je n'ai plus accès accès à l'historique du navigateur, et impossible de retrouver le site. Dsl.
Cordialement,

Vague Nerd

mike913
Raspinaute
Messages : 114
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: Manipulation de fichier en python

Message par mike913 » sam. 29 nov. 2014 11:18

Bonjour,

Tu peux aussi utiliser les fichiers de type 'configuration' (*.ini) avec la librairie configparser.
Ces fichiers sont de la forme:

Code : Tout sélectionner

[Section 1]
cle-1 = valeur1
cle-2 = texte deux 
cle-3 = 3
et ainsi de suite
ainsi tu peux lire et modifier la cle-2 de la Section-1
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.fr

mike913
Raspinaute
Messages : 114
Enregistré le : mar. 7 oct. 2014 09:46
Localisation : Morsang / Orge - Essonne
Contact :

Re: Manipulation de fichier en python

Message par mike913 » sam. 29 nov. 2014 11:48

Voici un exemple d' utilisation:
Le fichier Test.ini

Code : Tout sélectionner

[Fichiers]
logs = /var/www/RFX-Meteo/logs/Meteo.txt
status = /var/www/RFX-Meteo/config/Status.txt
meteoxml = /var/www/RFX-Meteo/datas/Sondes.xml
logsxml = /var/www/RFX-Meteo/logs/MeteoXml.txt

[Sondes]
tx5 = Rain6
50-05-4c-00 = Temp
51-01-4c-00 = HUM1
et un exemple pour manipuler ce fichier:

Code : Tout sélectionner

#!/usr/bin/env python
# coding=UTF-8
# =====================================
# import des modules
import serial
import datetime
import time
import struct
import sys
import os
import ConfigParser
# ----------------------------------------------------------------------------
# Lit la configuration
# ----------------------------------------------------------------------------
def Get_Config(configfile):
	cfg = ConfigParser.ConfigParser()
	cfg.read(configfile)
	return cfg	
# ----------------------------------------------------------------------------
# Ecrit dans le fichier de configuration
# ----------------------------------------------------------------------------
def Set_Config(configfile, cfg):
	with open(configfile, 'wb') as config:
		cfg.write(config)
#-------------------------------------------
#   Boucle principale
#------------------------------------------- 
cfgConf = Get_Config('Test.ini')  
print cfgConf.get('Fichiers', 'meteoxml')
cfgConf.set('Fichiers', 'meteoxml','Nouvelle Valeur')
Set_Config('Test.ini', cfgConf)
DS712+ 2x Western Digital WD10EADS-00L 1000 GB (SHR) - Firmware: DSM 6.1.6-15266
Raspberry - RFXTRX433 - Aeon Labs ZStick V2 - Domoticz
FreeBox v6
https://meteo.folcke.net
https://wiki.folcke.fr

Avatar du membre
Manfraid
Modérateur
Messages : 1401
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Manipulation de fichier en python

Message par Manfraid » lun. 1 déc. 2014 12:24

la meilleurs techinque pour faire un enreigstrement sur un fichier sans en relire complètement le contenu et ceci

Code : Tout sélectionner

f = open('monfichier.txt','a')
f.write('Ma ligne\n')
f.close()
et a chaque foi que le code sera executer une nouvelle ligne dans le fichier sera ajouter
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
vague nerd
Modérateur
Messages : 1469
Enregistré le : mar. 14 oct. 2014 11:42
Localisation : France !

Re: Manipulation de fichier en python

Message par vague nerd » lun. 1 déc. 2014 13:09

@Manfraid : evo ne veut pas écrire à la fin du fichier, mais en plein milieu.
Cordialement,

Vague Nerd

Avatar du membre
Manfraid
Modérateur
Messages : 1401
Enregistré le : ven. 3 oct. 2014 14:50
Contact :

Re: Manipulation de fichier en python

Message par Manfraid » lun. 1 déc. 2014 13:26

exact j'avais mal lu sont problème

dans ce cas pas le choix de passer dans tout le fichier et de modifier la ligne

Evotk : Aurais-tu un exemple de la structure de ton fichier pour avoir un ordre d'idée de command le modifier
NAS : DIY OS Debian: DD250Go + 3x2To + 6To
Raspberry pi : 2B OS : Raspbian
Se tromper est humain, Vraiment foutre la merde nécessite le mot de passe de root.

Avatar du membre
EVOTk
Modérateur
Messages : 802
Enregistré le : sam. 20 sept. 2014 02:36

Re: Manipulation de fichier en python

Message par EVOTk » mar. 2 déc. 2014 18:21

Salut Manfraid,
Je voulai faire un fichier de configuration du type :
####### CONFIG #####

--- TEMPERATURE ---
JOUR = 18
NUIT = 16

---
Et pouvoir modifier 18 ou 16 suivant le besoin via python

Mais visiblement sans re-ecrire tout le fichier a chaque fois cela n'est pas possible et bien que mon fichier ne sera pas gros du tout lidée me plait pas vraiment !

La proposition de mike913 me semble plutot adapté a se que je souhaite faire, je m'y pencherai quand je serai en repos :)
NAS : DS3615xs Xpenology - 8To + 2x 3To + 2x 4To WD Red - APC Back-UPS Pro 900
Imprimante 3D : Dagoma DiscoEasy 200
Surveillance Réseau : Smokeping sur Rasp. B / Raspbian
Arcade : Raspberry Pi 3 sous RecalBox

zeverybest
Raspinaute
Messages : 136
Enregistré le : sam. 18 oct. 2014 19:09

Re: Manipulation de fichier en python

Message par zeverybest » dim. 7 déc. 2014 18:34

Le plus simple serai soit de passer par un fichier XML (Python sait modifier une ligne ou un champ des ce type de fichier)
Soit de mettre tes valeurs dans une base SQL

C'est à mon sens, les moyens les plus simple pour modifier une seule valeur dans un fichier

Avatar du membre
EVOTk
Modérateur
Messages : 802
Enregistré le : sam. 20 sept. 2014 02:36

Re: Manipulation de fichier en python

Message par EVOTk » jeu. 11 déc. 2014 18:14

Hello,
la solution de mike913 me convient parfaitement pour le moment. Merci a vous.
NAS : DS3615xs Xpenology - 8To + 2x 3To + 2x 4To WD Red - APC Back-UPS Pro 900
Imprimante 3D : Dagoma DiscoEasy 200
Surveillance Réseau : Smokeping sur Rasp. B / Raspbian
Arcade : Raspberry Pi 3 sous RecalBox

Répondre

Retourner vers « Python »