Skriva en ny fil i Python
Hej, jag har helt fastnat på en uppgift där jag ska skriva en funktion annotated() som tar ett filnamn som parameter och skriver ut till en ny fil "out_annotated.txt" med originaltext, radnummer och totalt antal ord upp till och inklusive den raden - men jag får inte till det.
Jag har försökt fram och tillbaka så pass länge att jag nu egentligen inte har någonting att utgå ifrån, jag har fått enskilda saker att fungera bland annat har jag lyckats få python att skriva ut orden samt radnummer för en fil med kodningen:
def annotated(filename):
with open(filename, 'r') as f:
for i, line in enumerate(f, start=1):
print('{} {}'.format(i, line.strip()))
Men det saknas fortfarande antalet ord och att jag ska få det skriver över i en ny txt.fil. All hjälp uppskattas!
Edit: För att förtydliga vill jag från txt.filen:
hej du
luft eld vind vatten
ett väldigt stort berg här
ha en ny fil där det står:
hej du 1 2
luft eld vind vatten 2 6
ett väldigt stort berg här 3 11
Om du tror det finns tillräckligt med ram minne kan du spara allt i en string. Sen öppnar du en ny fil och skriver strängen dit. Jättebra start. Du behöver inte ändra något du gjort hittills för att komma vidare (utom print då).
En variabel som håller antalet ord skulle underlätta.
Aerius skrev:Om du tror det finns tillräckligt med ram minne kan du spara allt i en string. Sen öppnar du en ny fil och skriver strängen dit. Jättebra start. Du behöver inte ändra något du gjort hittills för att komma vidare (utom print då).
En variabel som håller antalet ord skulle underlätta.
Stort tack Aerius!
Jag la till num_words=0 (och num_words += len(line.split()) och la även till num_word I print funktionen. Men då får jag endast upp hur många ord det är per rad och inte totalt antal ord fram till och inklusive den raden, vad saknar jag då? Här nedan bifogar jag den nya kodningen:
Nu sätter du num_words till 0 hela tiden. Flytta upp det till början av funktionen.
Laguna skrev:Nu sätter du num_words till 0 hela tiden. Flytta upp det till början av funktionen.
Tack Laguna! Nu blev siffrorna rätt!