我正在尝试从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
**也是第一次发布代码,如果没有明确表示对不起。
答案 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
函数。