OVH Cloud OVH Cloud

Lignes tronquees en copier de fichiers?

8 réponses
Avatar
Bernard Grosperrin
Bonjour, je suis un complet debutant en Python, meme si je ne suis pas
completement debutant en programmation. Je travailles principalement avec
Clarion, et utilises Python pour ecrire quelques macros facilitant
l'utilisation de WinCVS avec Clarion.

Je suis en Windows XP, avec Python et PythonWin 2.4

J'aurais bien des questions, mais commencons par la premiere:
J'ai besoin de concatener des fichiers, pour ce faire je copie ligne a
ligne mes "petits" fichiers dans un grand. Jusque la tout va bien, mais !
je m'apercois que quelques longues lignes sont tronconnees, avec le
charactere "pipe" pour marquer que la ligne suivante est la suite de la
premiere. Probleme, c'est du code et ces lignes ne peuvent etre
tronquees...

Comment faire pour eviter cela ?

Si mon code peut aider a la solution :

hugeFile = open (hugeFileName, "w")
for fileName in TXAToCompile:
if (fileName != hugeFileName):
fileInput = open(fileName,"r")
if (fileInput):
for line in fileInput.readlines():
hugeFile.write(line)

fileInput.close()
else:
print fileInput+" does'nt exit, it is skiped"


hugeFile.close ()

Merci d'avance !
PS je sais que je pourrais passer une commande DOS,mais je veux eviter
l'ouverture de la fenetre de commande.....

Bernard

8 réponses

Avatar
atchoum
Si mon code peut aider a la solution :

hugeFile = open (hugeFileName, "w")
for fileName in TXAToCompile:
if (fileName != hugeFileName):
fileInput = open(fileName,"r")
if (fileInput):
for line in fileInput.readlines():
hugeFile.write(line)

fileInput.close()
else:
print fileInput+" does'nt exit, it is skiped"


hugeFile.close ()


Pourquoi faire "ligne à ligne".
Essaie ceci:

hugeFile = open(hugeFileName, 'w')
for filename in TXTAToCompile:
if fileName != hugeFileName:
try:
fileInput = open(fileName)
buf = fileInput.read()
fileInput.close()
hugeFile.write(buf)
except:
print "%s doesn't exist, skipped' % fileName
hugeFile.close()

Avatar
F. Petitjean
Bonjour, je suis un complet debutant en Python, meme si je ne suis pas
completement debutant en programmation. Je travailles principalement avec
Clarion, et utilises Python pour ecrire quelques macros facilitant
l'utilisation de WinCVS avec Clarion.

Je suis en Windows XP, avec Python et PythonWin 2.4

J'aurais bien des questions, mais commencons par la premiere:
J'ai besoin de concatener des fichiers, pour ce faire je copie ligne a
ligne mes "petits" fichiers dans un grand. Jusque la tout va bien, mais !
je m'apercois que quelques longues lignes sont tronconnees, avec le
charactere "pipe" pour marquer que la ligne suivante est la suite de la
premiere. Probleme, c'est du code et ces lignes ne peuvent etre
tronquees...

Comment faire pour eviter cela ?

Si mon code peut aider a la solution :
S'il vous plaît ne pas utiliser les tabulmtions mais 4 espaces à la

place

hugeFile = open (hugeFileName, "w")
# Remplacez "w" par "w+a"

for fileName in TXAToCompile:
if (fileName != hugeFileName):
fileInput = open(fileName,"r")
# if (fileInput): non! vous n'aurez pas un fileInput masi
une exception ==> ce test ne sert à rien
# for line in fileInput.readlines(): # non!
for line in fileInput: # un file est un itérateur (en
python >= 2.3)
hugeFile.write(line)

fileInput.close()
# else:
# print fileInput+" does'nt exit, it is skiped"


hugeFile.close ()

Merci d'avance !
PS je sais que je pourrais passer une commande DOS,mais je veux eviter
l'ouverture de la fenetre de commande.....

Bernard
bref, une solution possible

filenames = [ fn for fn in TXAToCompile if fn != hugeFileName ]
hugeFile = open(hugeFileName, "w+a")
hfwrite = hugeFile.write
for fname in filenames:
try:
fin = open(fname) # mode 'r' par défaut est très bien
for line in fin:
hfwrite(line)
fin.close()
except IOError:
print "'%s' doesnot exit, skipped" % (fname,)
hugeFile.close()

Vous pouvez aussi vous inspirer de la lecture de shutil.py dans la
bibliothèque standard python.

Amicalement

Avatar
Do Re Mi chel La Si Do
Bonjour !


Tu peux essayer ça :

hugef=open(hugeFileName,"w")
hugef.write(string.join([open(fic,"r").read() for fic in TXAToCompile if
fic!=hugeFileName],''))
hugef.close()



ou, plus court :

open(hugeFileName,"w").write(string.join([open(fic,"r").read() for fic in
TXAToCompile if fic!=hugeFileName],''))





@-salutations
--
Michel Claveau
Avatar
Do Re Mi chel La Si Do
Attention, usenet ne respectant pas les normes NNTP, des lignes ont été
fracturées.
Le premier script a trois lignes ; le second une seule ligne.
Remettre d'aplomb, après un copier/coller.

Bonne journée.
--
Michel Claveau
Avatar
Laurent Pointal
Bernard Grosperrin wrote:

Bonjour, je suis un complet debutant en Python, meme si je ne suis pas
completement debutant en programmation. Je travailles principalement avec
Clarion, et utilises Python pour ecrire quelques macros facilitant
l'utilisation de WinCVS avec Clarion.

Je suis en Windows XP, avec Python et PythonWin 2.4

J'aurais bien des questions, mais commencons par la premiere:
J'ai besoin de concatener des fichiers, pour ce faire je copie ligne a
ligne mes "petits" fichiers dans un grand. Jusque la tout va bien, mais !
je m'apercois que quelques longues lignes sont tronconnees, avec le
charactere "pipe" pour marquer que la ligne suivante est la suite de la
premiere. Probleme, c'est du code et ces lignes ne peuvent etre
tronquees...

Comment faire pour eviter cela ?


C'est du texte, mais pourquoi faire ligne par ligne ?

En passant par des ouvertures binaires et de la lecture en bloc des petits
fichiers, ça devrais le faire... et tu es sûr qu'il ne vas pas y avoir de
caractère qui passe mystérieusement à la trappe...

Genre (tapé dans le post - non testé) :

eol = os.linesep
eolen = len(os.linesep)

hugeFile = open(hugeFileName,"wb")
for fileName in TXAToCompile :
if fileName==hugeFileName : continue
smallFile = open(fileName,"rb")
s = smallFile.read()
hugeFile.write(s)
# Eventuellement ajouter un retour à la ligne si le petit fichier ne
# se termine pas par un tel caractère.
if and s[-eolen:]<>eol: hugeFile.write(eol)
smallFile.close()
hugeFile.close()


A+

Laurent.

Avatar
Bernard Grosperrin
Laurent, Michel et les autres dont je ne connais pas le nom,

Merci beaucoup de votre aide et de vos exemples...Quand je disais que je
debute completement en Python!

En plus, ca fait du bien d'avoir un peu d'aide dans la langue de Moliere
quand on est travailleur immigre aux US !

Merci encore
Bernard
PS-Je reviendrais avec beaucoup d'autres questions
Avatar
Do Re Mi chel La Si Do
Bonsoir !

Reviens quand tu veux. Surtout que le rêve américain a l'air d'avoir du mal
à se conjuguer en français, ces temps-ci.

@-salutations
--
Michel Claveau
mél : http://cerbermail.com/?6J1TthIa8B
sites : http://mclaveau.com http://bergoiata.org http://ponx.org
Avatar
Bernard Grosperrin
Reviens quand tu veux. Surtout que le rêve américain a l'air d'avoir du mal
à se conjuguer en français, ces temps-ci.


hahum. No comments... (ma femme est americaine). Et desole pour le manque
d'accents!

Bernard