2014-02-12 31 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