mikrocontroller.net

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


Autor: Marcel (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

ich importiere in diesem Test eine Textdatei. Der Inhalt sieht so aus:
A
B
C
D
E
F
Anschließend möchte ich diese Zeilen in einer Excel Datei wieder 
schreiben
import codecs
import xlsxwriter
from tkinter.filedialog import askopenfilename

workbook_overview = xlsxwriter.Workbook("Test.xls")
worksheet_overview = workbook_overview.add_worksheet()
worksheet_overview.write('A1', 'imports')

name = askopenfilename(filetypes =(("Import File", "*.txt"),("All Files","*.*")),
                       title = ""
                       )
f = codecs.open(name, encoding='utf-8')

file_names = []
for imports in f:
    imports = imports.strip()
    if ',' in imports:
        for f in imports.split(','):
            file_names.append(f)
    else:
        file_names.append(imports)
    
count = 2
for imports in file_names:
    print(imports)    
    try:      
        worksheet_overview.write('A' + str(count), imports)
    except:
        print(imports, "something wrong")    
count += 1

workbook_overview.close()
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?

Autor: Kobain (Gast)
Datum:

Bewertung
-5 lesenswert
nicht 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.

Autor: Thomas (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Kobain schrieb:
> noch die
> Programmiersprache

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

Autor: Sebastian S. (amateur)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Joachim S. (oyo)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kobain (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Joachim S. schrieb:
> Die Programmiersprache steht doch schon in der Überschrift,

Manchmal hat man echt Tomaten auf den Augen! SORRY

Autor: Thomas (Gast)
Datum:

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

Autor: Sheeva P. (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcel schrieb:
> Was mache ich falsch?
count = 2
for imports in file_names:
    print(imports)    
    try:      
        worksheet_overview.write('A' + str(count), imports)
    except:
        print(imports, "something wrong")    
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:
#!/usr/bin/env python
import xlsxwriter

if __name__ == '__main__':
    
    content = [l.strip() for l in open('f.txt', 'r').readlines()]
    
    wb = xlsxwriter.Workbook("Test.xlsx")
    ws = wb.add_worksheet()
    ws.write('A1', 'imports')
    for num, nam in enumerate(content):
        ws.write('A'+str(num+2), nam)
    wb.close()

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

Bewertung
0 lesenswert
nicht 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:
import pandas as pd
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.

Autor: Olaf (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Plus eins für den niedlichen Bären!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.