2014-02-12 55 views
0

大家晚上好,可以用Python

處理文件的問題我是相當新的Python和此刻,在此刻,我對如何正確地編輯文件(.txt或問題所困擾。 csv)在python中。我正在嘗試編寫一個小程序,將每行文本文件加密,然後對其進行加密,然後逐行覆蓋文件並保存。我的代碼的相關部分看起來像這樣到目前爲止:

with open('/home/path/file.csv', 'r+') as csvfile: 
    for row in csv.reader(csvfile, delimiter='\t'): 
     y = [] 
     for i in range(0, len(row)): 
      x = encrypt(row[i], password) 
      y.append(x) 
     csvfile.write(''.join(y)) 

其中,執行時什麼也不做。我打的代碼一點點,有時它運行到

TypeError: expected a character buffer object 

加密函數返回一個字符串,我的文件由每行3個字符串,由片分隔,像這樣的:

key1 value1 value1' 
key2 value2 value2' 
key3 value3 value3' 
... 

csv.reader似乎正確地讀取文件並每行返回一個列表,然後y返回一個帶有加密短語的列表。但是,我似乎無法獲得file.write()函數來實際覆蓋文件。有誰知道如何解決這個問題? 任何幫助將不勝感激。

感謝,

安迪

+0

你可能只是缺少一個'csvfile.seek(0)'將重置您的文件光標移動到文件的開頭寫之前,(你要首先做您的所有閱讀,然後寫在一切如果你把內容寫到一個新的文件中,它會執行什麼操作嗎? –

回答

1

你已經打開了該文件爲只讀。您需要打開第二個文件才能寫入。

with open('/home/path/file.csv', 'r+') as csvfile: 
    for row in csv.reader(csvfile, delimiter='\t'): 
     y = [] 
     for i in range(0, len(row)): 
      x = encrypt(row[i], password) 
      y.append(x) 
with open('/home/path/file.csv', 'w') as csvfile: 
    csvfile.write(''.join(y)) 

我不喜歡覆蓋我的文件,磁盤空間很便宜。

with open('/home/path/file.csv', 'r+') as csvfile: 
    with open('/home/path/file.enc', 'w') as csvencryptedfile: 
     for row in csv.reader(csvfile, delimiter='\t'): 
      y = [] 
      for i in range(0, len(row)): 
       x = encrypt(row[i], password) 
       y.append(x) 
      csvencryptedfile.write('\t'.join(y)) 
      csvencryptedfile.write('\n') 
+0

啊,我認爲既然「r +」的意思是「讀/寫」,我不需要在寫模式下打開第二個文件。現在完美,非常感謝。 – andynitrox