初学者:Python - 迭代csv行,追加结果

时间:2014-01-19 02:46:20

标签: python csv

我正在尝试从csv输入数据并通过一个简单的函数运行它并将其返回到相同的CSV但附加到行的末尾。

我很难理解各种模式(r,r +,a +等)之间的区别。

我已经阅读了文档,但作为初学者我并不完全理解他们的意思,在这种情况下我应该使用哪一个。

def appendCurrentTime():
    with open("file.csv", "??") as myfile:  #Opens File
        reader = csv.reader(myfile)         
        for row in reader:                  #Runs through each row
            myfile.write(current_time(row[1])) #appends the time, pulling in row[1] into current_time

**也是第一次发布代码,如果没有明确表示对不起。

2 个答案:

答案 0 :(得分:1)

查看您的代码,主要问题是CSV文件不是“数据库”,因此您无法修改中间的行而不会破坏下一行。

因此,以“wb”模式打开源文件,以“wb”模式打开目标文件,并在处理完整个文件后 - 删除原始文件并将新文件重命名为原始名称。

并且,您指定的案例的描述:

"r" - open text file for reading, starting from the beginning.
"r+" - open text file for reading and writing, starting from the beginning.
"a+" - create file if not exists; then open as a text file for reading and writing, starting from the end of file, plus you can only write to the end of the file.

简而言之,“R”表示读,“W”写,“+” - “和其他方式”,“B” - 二进制,“B”表示文本。 “A”与“W”的不同之处在于,当您拨打open时,“W”会清除文件内容。

恕我直言,您应该在大多数情况下以二进制模式打开文件,即使它们在逻辑上是“文本”,也可以防止特殊字符的意外转换(尤其对Unicode很重要)。因此,我建议“wb”将“写入新文件”,“rb”改为“读取现有”,将“ab”改为“附加到现有文件”,例如一个日志文件。

有关更多信息,请阅读POSIX fopen function的文档 - Python尽可能地尝试遵循其语义,即使在Windows系统上也是如此。

答案 1 :(得分:0)

由于它是CSV文件和隐含文本,因此“rU”标志是合适的。 r标志表示读取,U表示通用线路终结器模式。这样,无论文件是使用Windows,Mac还是Unix行终止符,都无关紧要。

另请查看CSV库提供的Sniffer。它会自动为您检测大多数方言,并可以传递到reader函数。

http://docs.python.org/2/library/csv.html#csv.Sniffer