2017-07-11 1 views
0

Ich versuche, ein Skript mit folgenden Funktionen zu bauen,kann nicht eine bestimmte Position in allen Zeilen einer Datei aktualisieren Python mit

Eingabe von User-Take a) Dateiname b) bestimmte Position -Update/ändern c) Neuer Wert

Eingabedatei, wie weiter unten würde

uuuuuuuuuuuuuuuuuuuuuuuu
iiiiiiii hhh hhhh iiii
iiiiiiiii IIIIIIIIIIIIIIII tttttttttttttttttt

ich nur die oben für die erste Zeile der Datei zu tun verwaltet (ohne Eingabe von Benutzer zu nehmen)

import os,mmap 
InputFile=os.open("testt.txt",os.O_RDWR) 
Line=mmap.mmap(InputFile,0) 
Line[4:9]="44444" 
os.close(InputFile) 

Wenn ich das gleiche versuchen Second zu aktualisieren Linie Line=mmap.mmap(InputFile,1), mit dem unten stehenden Fehler geschlagen,

Traceback (most recent call last): 
    File "C:/Python27/Scripts/Test.py", line 10, in <module> 
    Line[4:9]="44444" 
IndexError: mmap slice assignment is wrong size 
>>> 

Wir freuen uns für Anregung/Hilfe bekommen thi s getan.

+1

Gibt es einen Grund, warum Sie verwenden 'os.open' anstelle der in Funktion gebaut' open() ' –

+0

@Professor_Joykill: kein Grund, als solche .. :) – cbk

+0

Kannst du bitte mehr ausarbeiten, was du machen willst? – babygame0ver

Antwort

0

Betrachten Sie die Datei abc.txt und main.py Datei in demselben Verzeichnis

Inhalt des abc.txt vor main.py Skript ausgeführt wird:

aaaaaaaaa 
bbbbbbbbb 
ccccccccc 

Inhalt von main.py

line = input() 
first_position = input() 
second_position = input() 
datav = raw_input() 
with open('abc.txt','r+') as f: 
    data = map(str,f.read().split('\n')) 
    change = data[line-1][:first_position] + ''.join(datav) + data[line-1][second_position:] 
    data[line-1] = change 
    with open('abc.txt','w+') as t: 
     for i in data: 
      t.write(i+'\n') 

**Custom input** 

1 

2 

7 

bbbbbb 

**Sample output** as expected it is saved in the file abc.txt: 


aabbbbbaa 

bbbbbbbbb 

ccccccccc 
+1

Erstaunlich, es funktionierte genau so, wie es nötig war :) ... danke eine Tonne! – cbk

+0

Anerkannt Liebe – babygame0ver

+0

Wie wäre es mit der Eingabe (Line, FirstPosition, SecondPosition & NewValue) von einem Excel für 10-Satz von Daten .. würde das mit einem Excel-Modul wie "openpyxl" oder "Pandas" arbeiten? – cbk

Verwandte Themen