2016-10-22 3 views
0

Ich bin ein Programmierneuling, und die Hälfte meines Problems ist, dass ich nicht die richtigen Fragen zu stellen finden kann - ich habe mir viele Stack Overflow Beiträge zu versuchen, durch meine Probleme zu arbeiten, aber Ich konnte das, was ich gefunden habe, nicht auf meine Situation anwenden. Folglich brauche ich deine Hilfe, Internet.E-Mail eine Liste der Verkäufe mit Python3

Ich versuche, ein Programm zu erstellen, das einmal pro Woche mit Windows Scheduler ausgeführt wird. Wenn es läuft, es sollte:

  • eine Excel-Datei konsultieren,
  • einige Informationen aus den letzten vierzig Zeilen extrahieren,
  • ein Formular E-Mail erstellen,
  • umfassen die extrahierten Informationen in Form E-Mail ,
  • senden Sie die E-Mail-Formular an einen bestimmten Empfänger.

Ich habe SMTP adaequat einschließlich der Form E-Mail-Generators, und ich kann die Statistiken aus dem Excel-Blatt erhalten mit openpyxl, aber ich kann nicht die Informationen in ein nutzbares Format ringen zu senden .

Der Code, den ich bisher bekommen habe (für dieses Info Handhabung) sieht wie folgt aus:

# Open stats sheet 
wb = openpyxl.load_workbook('Stats.xlsx') 
sheet = wb.get_sheet_by_name('DATA') 

# Get the author, title and price of last forty sales 
ultimateRow = sheet.max_row + 1 
limitRow = sheet.max_row - 40 
recentList = [] 
for row in range(limitRow, ultimateRow): 
    recentSales = [] 
    for column in 'GHI': 
     cell_name = '{}{}'.format(column, row) 
     recentSales.append(sheet[cell_name].value) 
    recentList.append(recentSales) 

print(*recentList) 

Was ich von dem bekommen eine ganze Rieses Text ist, wie folgt aus:

['DEIGHTON, Len (born 1929).', 'Twinkle Twinkle Little Spy.', 20] ['BROOKE, Rupert (1887-1915); ABERCROMBIE, Lascelles (1881-1938); DRINKWATER, John (1882-1937); GIBSON, Wilfrid Wilson (1878-1962).', 'New Numbers Volume 1 Number 3.', 76] ['SHUTE, Nevil.', 'A Town Like Alice.', 100] ['SWINBURNE, Algernon Charles (1837-1909).', 'A Song of Italy.', 15]

im Idealfall, was ich in einer E-Mail senden möchte, würde so aussehen, mit einer neuen Linie für jeden einzelnen Verkauf Artikel:

DEIGHTON, Len (born 1929). - Twinkle Twinkle Little Spy.- 20

BROOKE, Rupert (1887-1915); ABERCROMBIE, Lascelles (1881-1938); DRINKWATER, John (1882-1937); GIBSON, Wilfrid Wilson (1878-1962) - New Numbers Volume 1 Number 3. - 76

ich eine E-Mail Körper geschrieben haben, die eingerichtet ist, um die Liste der Informationen umfassen ein Format wie folgt verwendet:

body = ''' This is an email. Here's the list: {}'''.format(list) 

Alle Hinweise auf den kein Zweifel scheußlichen Code oben dankbar empfangen würde.

+0

Schauen Sie sich mit „“ .join (recentSales) Listen in Strings zu drehen. Und schauen Sie sich die neueste openpyxl-Dokumentation an. –

Antwort

-1

Ich glaube, so etwas wird produzieren, was Sie brauchen.

for ls in recentList: 
    line = " ".join([str(x) for x in ls]) 
    print(line + "\n") 
+0

Elemente in einer Liste werden automatisch in Zeichenfolgen konvertiert, sodass das verschachtelte Verständnis nicht erforderlich ist. –

+0

@CharlieClark '> Meine Liste ['DEIGHTON, Len (geboren 1929).', 'Twinkle Twinkle Little Spy.', 20] >>> "" .join (Meine Liste) Traceback (letzten Anruf zuletzt): Datei "", Zeile 1, in TypeError: Sequenzelement 2: erwartete Zeichenfolge, int gefunden " – user3468054

+1

@CharlieClark [Python-Dokumente] (https://docs.python.org/3/library/stdtypes. html? highlight = join # str.join) sagt, dass es nur Strings braucht –

0

Wie andere gesagt haben, verwenden Sie verbinden.

Sie könnten anstelle von recentList.append(recentSales) so etwas wie: recentList.append(' '.join([str(x) for x in recentSales) , die in einer schön formatierte Liste von Strings in recentList führen.

Die Linie Ihre E-Mail-Körper zu erzeugen, dann so etwas wie sein könnte:

>>> body = 'This is an email. Here is the list\n' + '\n'.join('{}'.format(l) for l in recentList) 
>>> print body 
This is an email. Here is the list 
DEIGHTON, Len (born 1929). Twinkle Twinkle Little Spy. 20 
BROOKE, Rupert (1887-1915); ABERCROMBIE, Lascelles (1881-1938); DRINKWATER, John (1882-1937); GIBSON, Wilfrid Wilson (1878-1962). New Numbers Volume 1 Number 3. 76 
SHUTE, Nevil. A Town Like Alice. 100 
SWINBURNE, Algernon Charles (1837-1909). A Song of Italy. 15 
Verwandte Themen