Chcę wstawić tekst konkretnie przed linią "Numer".

Chcę wstawić "cześć wszystkich" przed rozpoczęciem linii z "numerem"

Mój kod:

import re
result = []
with open("text2.txt", "r+") as f:
    a = [x.rstrip() for x in f] # stores all lines from f into an array and removes "\n"
    # Find the first occurance of "Centre" and store its index
    for item in a:
        if item.startswith("Number"): # same as your re check
            break
    ind = a.index(item) #here it produces index no./line no.
    result.extend(a[:ind])
        f.write('Hello Everyone')

Plik tekstowy:

QWEW
RW
...
Number hey
Number ho

Oczekiwany wynik:

QWEW
RW
...
Hello Everyone
Number hey
Number ho

Pomóż mi naprawić mój kod: nie dostaję niczego w dworzeniu z moim plikiem tekstowym! Proszę o pomoc! Odpowiedzi zostaną docenione!

-3
asey raam 16 sierpień 2014, 10:48

3 odpowiedzi

Najlepsza odpowiedź

Problem

Kiedy wykonasz open("text2.txt", "r"), otworzysz plik dla odczytu , a nie dla Pisanie . Dlatego nic nie pojawia się w twoim pliku.

Poprawka

Przy użyciu r+ zamiast r umożliwia również zapisanie do pliku (został również wskazany w komentarzach. Jednak to jednak nadpisuje , więc bądź ostrożny (to jest Ograniczenie systemu operacyjnego, jak opisano np. Oto). The Następnie należy wykonać to, czego pragniesz: wkłada "Hello everyone" na listę linii, a następnie nadpisuje plik za pomocą zaktualizowanych linii.

with open("text2.txt", "r+") as f:
    a = [x.rstrip() for x in f]
    index = 0
    for item in a:
        if item.startswith("Number"):
            a.insert(index, "Hello everyone") # Inserts "Hello everyone" into `a`
            break
        index += 1
    # Go to start of file and clear it
    f.seek(0)
    f.truncate()
    # Write each line back
    for line in a:
        f.write(line + "\n")
2
hlt 16 sierpień 2014, 07:06

Prawidłowa odpowiedź na Twój problem jest hlt jeden, ale rozważ także przy użyciu fileinput moduł:

import fileinput

found = False
for line in fileinput.input('DATA', inplace=True):
    if not found and line.startswith('Number'):
        print 'Hello everyone'
        found = True
    print line,
2
Community 23 maj 2017, 12:34

Jest to w zasadzie to samo pytanie, co Oto: Proponują Zrób to w trzech krokach: Przeczytaj wszystko / Wstaw / Przepisz wszystko

with open("/tmp/text2.txt", "r") as f:
lines = f.readlines()

for index, line in enumerate(lines):
    if line.startswith("Number"):
        break
lines.insert(index, "Hello everyone !\n")

with open("/tmp/text2.txt", "w") as f:
    contents = f.writelines(lines)
1
Community 23 maj 2017, 10:33