2016-04-27 7 views
0

Mein CodeWie man itertools.izip in die txt-Datei Zeile für Zeile schreiben?

import itertools 
import os 

with open("base.txt") as fv, open("new2.txt", 'r') as fi, open('sortedf.txt','w') as fs: 
    vel = (line.strip() for line in fv) 
    ind = (int(line.strip()) for line in fi) 
    z = itertools.izip(ind, vel) # sort according to ind 
    # itertools.izip(vel, ind) # sort according to vel 
    for i, v in sorted(z): 
     fs.write(str(v)) 

habe ich alles auf eine Linie

2.900000e+032.900000e+032.900000e+032.900000e+032. 

Als ich fs.write('\n'.join(str(v)))

Dann bekam ich

richtige eine
2 
. 
9 
0 
0 
0 
0 
0 
e 
+ 
0 
32 
. 
9 
0 
0 
0 
0 
0 
e 
+ 
0 
32 
. 

Wie kommt man ändern, indem Zeilenwertausgabe?

+2

Sie wollen einen Zeilenumbruch nach jeder Zeile, richtig? Wie wäre es also mit 'fs.write (str (v) + '\ n')'? –

+0

@GarethMcCaughan Ja das ist das Wright-Format. –

Antwort

2

Just Change

for i, v in sorted(z): 
    fs.write(str(v)) 

zu

for i,v in sorted(z): 
    print(v, file=fs) 
  • \n wird automatisch aufgrund der end="\n" Standardparameter für jeden Datentyp print

  • Werke hinzugefügt. Keine Notwendigkeit für str(v)

1

Bitte versuchen Sie die folgenden

fs.writelines(map(lambda x: x[1], sorted(z))) 

unter Anweisung Warum

fehlgeschlagen
fs.write('\n'.join(str(v))) 

Hier v, in eine Liste umgewandelt und kommen über sie angelegt. Sehen Sie sich das folgende Beispiel an, um die Übersichtlichkeit zu verdeutlichen:

>>> sam = 'hello' 
>>> '-'.join(sam) 
'h-e-l-l-o' 

so wie fs.write zu verwenden?

  1. schreiben wie: fs.write (v)
  2. jetzt Zeilenumbrüche hinzufügen: fs.write ('\ n')

paar Vorschläge:

import os # load important modules first 

from itertools import izip # makes processing faster, if you only need izip 


with open("base.txt") as fv, open("new2.txt", 'r') as fi, open('sortedf.txt','w') as fs: 
    vel = [line.strip() for line in fv] # use square braces 
    ind = int(line.strip()) for line in fi] # use square braces 
    z = izip(ind, vel) # sort according to ind 
    for i, v in sorted(z): 
     fs.write(v) 
     fs.write('\n') # adding line break