In Python xls Datei erstellen und zeilenweise schreiben

Gast #5216566
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?
Gast #5216580
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.
Gast #5216583
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?
#5216613
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.
Gast #5216637
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")
#5217016
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 von einem Moderator gelöscht.
#5244358
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren