2017-08-26 4 views
0

Kann jemand bitte sagen, warum bin ich auf Python den folgenden Fehler empfangen 3. Das folgende ist die Zurückverfolgungs:String-Argument ohne Codierung

TypeError 
Traceback (most recent call last) <ipython-input-24-a81d4875414b> in <module>() 
     7  filename = [("id"), ("name"), ("email"), ("amount"),("sent")] 
     8  writer= csv.DictWriter(temp_file, fieldnames = fieldnames) 
----> 9  writer.writeheader() 
    10 
    11  for row in reader: 
C:\Users\johsc_001\AppData\Local\conda\conda\envs\ipykernel_py3\lib\csv.py in writeheader(self) 
    142  def writeheader(self): 
    143   header = dict(zip(self.fieldnames, self.fieldnames)) 
--> 144   self.writerow(header) 
    145 
    146  def _dict_to_list(self, rowdict): 
C:\Users\johsc_001\AppData\Local\conda\conda\envs\ipykernel_py3\lib\csv.py in writerow(self, rowdict) 
    153 
    154  def writerow(self, rowdict): 
--> 155   return self.writer.writerow(self._dict_to_list(rowdict)) 
    156 
    157  def writerows(self, rowdicts): 
C:\Users\johsc_001\AppData\Local\conda\conda\envs\ipykernel_py3\lib\tempfile.py in func_wrapper(*args, **kwargs) 
    481    @_functools.wraps(func) 
    482    def func_wrapper(*args, **kwargs): 
--> 483     return func(*args, **kwargs) 
    484    # Avoid closing the file as long as the wrapper is alive, 
    485    # see issue #18879. 

TypeError: a bytes-like object is required, not 'str' 

Hier ist der Quellcode:

import csv 
import shutil 
from tempfile import NamedTemporaryFile 
filename = 'appendpyt2.csv' 
temp_file = NamedTemporaryFile(delete= False) 
with open(filename, 'rb')as csvfile, temp_file: 
    reader =csv.DictReader(csvfile) 
    filename = ["id", "name", "email", "amount", "sent"] 
    writer= csv.DictWriter(temp_file, fieldnames = ["id", "name", "email","amout", "sent"]) 
    writer.writeheader() 
    for row in reader: 
     print(row) 
     writer.writerow({ 
      "id": row["id"], 
      "name": row["name"], 
      "email":row["email"], 
      "amout":"1234.56", 
      "sent": "" 
     }) 
+0

es scheint, dass die probl em öffnet die Datei als 'rb'. Stellen Sie den StackTrace bitte auf die Frage – ShmulikA

+0

Können Sie die tatsächliche Traceback zeigen? Übrigens, das ist kein [minimales, nachprüfbares Beispiel] (https://stackoverflow.com/help/mcve). Es hilft enorm, wenn Sie einen zur Verfügung stellen. – jszakmeister

+2

Sie haben dies sowohl mit 2,7 als auch mit 3-x markiert. Was benutzt du? Oft unterscheiden sich String-Coding-Probleme zwischen den beiden. – hpaulj

Antwort

0

Der Fehler scheint von der Verwendung von Python 3 zu sein, aber Python 2-Anforderungen zum Öffnen von csv Dateien verwenden. Wenn Sie Python 3 verwenden, sollten CSV-Dateien nicht im Binärmodus geöffnet werden und der Parameter newline sollte die leere Zeichenfolge sein. Die temporäre Datei wird standardmäßig ebenfalls im Binärmodus angezeigt. Daher habe ich sie überschrieben. Ich habe auch das Folgende als eine Eingabedatei verwendet, die aus dem Code abgeleitet wurde, da keine Beispieleingabe bereitgestellt wurde.

appendpyt2.csv:

id,name,email 
id1,name1,email1 
id2,name2,email2 

Python 3-Code:

import csv 
import shutil 
from tempfile import NamedTemporaryFile 
filename = 'appendpyt2.csv' 
temp_file = NamedTemporaryFile(mode='w+',newline='',delete= False) 
with open(filename,newline='') as csvfile, temp_file: 
    reader =csv.DictReader(csvfile) 
    filename = ["id", "name", "email", "amount", "sent"] 
    writer= csv.DictWriter(temp_file, fieldnames = ["id", "name", "email","amount", "sent"]) 
    writer.writeheader() 
    for row in reader: 
     print(row) 
     writer.writerow({ 
      "id": row["id"], 
      "name": row["name"], 
      "email":row["email"], 
      "amount":"1234.56", 
      "sent": "" 
     }) 

temporäre Datei Ausgabe:

id,name,email,amount,sent 
id1,name1,email1,1234.56, 
id2,name2,email2,1234.56, 
+0

Vielen Dank – johschnei

Verwandte Themen