Forum: PC-Programmierung In Python xls Datei erstellen und zeilenweise schreiben


von Marcel (Gast)


Lesenswert?

Hallo,

ich importiere in diesem Test eine Textdatei. Der Inhalt sieht so aus:
1
A
2
B
3
C
4
D
5
E
6
F
Anschließend möchte ich diese Zeilen in einer Excel Datei wieder 
schreiben
1
import codecs
2
import xlsxwriter
3
from tkinter.filedialog import askopenfilename
4
5
workbook_overview = xlsxwriter.Workbook("Test.xls")
6
worksheet_overview = workbook_overview.add_worksheet()
7
worksheet_overview.write('A1', 'imports')
8
9
name = askopenfilename(filetypes =(("Import File", "*.txt"),("All Files","*.*")),
10
                       title = ""
11
                       )
12
f = codecs.open(name, encoding='utf-8')
13
14
file_names = []
15
for imports in f:
16
    imports = imports.strip()
17
    if ',' in imports:
18
        for f in imports.split(','):
19
            file_names.append(f)
20
    else:
21
        file_names.append(imports)
22
    
23
count = 2
24
for imports in file_names:
25
    print(imports)    
26
    try:      
27
        worksheet_overview.write('A' + str(count), imports)
28
    except:
29
        print(imports, "something wrong")    
30
count += 1
31
32
workbook_overview.close()
33
print ("end of file")

In der erstellten Excel Datei wird mir aber immer nur die letzte Zeile 
ausgegeben, die vorherigen werden ignoriert oder direkt wieder 
überschrieben.

Was mache ich falsch?

von Kobain (Gast)


Lesenswert?

Marcel schrieb:
> Was mache ich falsch?

Du nennst uns weder die Hardware (PC, Tablett usw), noch das 
Betriebssystem (Windows, Linux, IOS, Android usw.), noch die 
Programmiersprache (da gibt es so viele, da zähl ich jetzt keine auf). 
Und um welchen Test es überhaupt geht ("ich importiere in diesem Test 
eine Textdatei.")

Merkst du was? Sag erstmal, um was es überhaupt geht.
Vorher ist alles nur Kaffesatz-Leserei.

von Thomas (Gast)


Lesenswert?

Kobain schrieb:
> noch die
> Programmiersprache

Wer die nicht erkennt, kann sowieso nicht helfen.
1
count = 2
2
for imports in file_names:
3
    print(imports)    
4
    try:      
5
        worksheet_overview.write('A' + str(count), imports)
6
    except:
7
        print(imports, "something wrong")    
8
count += 1
Preisfrage: Wann und wie oft wird die letzte Zeile ausgeführt und in 
welchem Verhältnis zur "for imports..."-Schleife steht sie?

von Sebastian S. (amateur)


Lesenswert?

@ Kobain
Das erste, was ich immer lese ist die Titelzeile.
Irgendjemand hat da "Python" reingeschrieben.
Das erschwert die Suche, nach der Programmiersprache, natürlich 
ungemein.

von Joachim S. (oyo)


Lesenswert?

Kobain schrieb:
> Marcel schrieb:
>> Was mache ich falsch?
>
> Du nennst uns weder die Hardware (PC, Tablett usw), noch das
> Betriebssystem (Windows, Linux, IOS, Android usw.), noch die
> Programmiersprache (da gibt es so viele, da zähl ich jetzt keine auf).
> Und um welchen Test es überhaupt geht ("ich importiere in diesem Test
> eine Textdatei.")

Die Programmiersprache steht doch schon in der Überschrift, Hardware und 
Betriebssystem hingegen sollten für die Fragestellung doch völlig 
irrelevant sein.

Oder war das ganze Posting nur ein Witz, dessen Pointe ich nicht 
verstanden habe?

@Threadstarter: Wie Thomas bereits angedeutet hat, ist das Problem die 
letzte Zeile; die nicht eingerückt und somit nicht Teil der Schleife 
ist.

von Kobain (Gast)


Lesenswert?

Joachim S. schrieb:
> Die Programmiersprache steht doch schon in der Überschrift,

Manchmal hat man echt Tomaten auf den Augen! SORRY

von Thomas (Gast)


Lesenswert?

Etwas schöner (und nicht für den obigen Fehler anfällig) wäre:
1
for row, imports in enumerate(file_names, start=2):
2
    print(imports)    
3
    try:      
4
        worksheet_overview.write('A' + str(row), imports)
5
    except:
6
        print(imports, "something wrong")

von Sheeva P. (sheevaplug)


Lesenswert?

Marcel schrieb:
> Was mache ich falsch?
1
count = 2
2
for imports in file_names:
3
    print(imports)    
4
    try:      
5
        worksheet_overview.write('A' + str(count), imports)
6
    except:
7
        print(imports, "something wrong")    
8
count += 1

Du modifizierst die Variable "count" nicht in, sondern erst nach der 
Schleife (Einrückung!). Dadurch schreibst Du immer wieder .write('A2', 
...), also in die Zelle A2. Wenn ich es so mache, geht's:
1
#!/usr/bin/env python
2
import xlsxwriter
3
4
if __name__ == '__main__':
5
    
6
    content = [l.strip() for l in open('f.txt', 'r').readlines()]
7
    
8
    wb = xlsxwriter.Workbook("Test.xlsx")
9
    ws = wb.add_worksheet()
10
    ws.write('A1', 'imports')
11
    for num, nam in enumerate(content):
12
        ws.write('A'+str(num+2), nam)
13
    wb.close()

Beitrag #5217020 wurde vom Autor gelöscht.
von Johannes E. (scootty)


Lesenswert?

Als Alternative zu den bisherigen Lösungsansätzen werfe ich mal das 
Modul Pandas in den Raum.

Das sieht dann ganz einfach so aus:
1
import pandas as pd
2
pd.read_csv('test.txt', header=None).to_excel('test.xlsx', header=False, index=False)

Einfacher und kürzer geht es imho nicht. ;)

Pandas ist übrigens für alles was mit Import/Export von Datenreihen und 
deren Verarbeitung zu tun hat ein geniales Tool.

von Olaf (Gast)


Lesenswert?

Plus eins für den niedlichen Bären!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.