我正在搜索如何在Python中向CSV追加新行。我想要的是将路径预定义为字符串对象。我遇到了this:
import csv
fields=['first','second','third']
with open(r'name', 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
我想要的是在上述实现中经过修改的类似内容
path='home/user/new.csv'
import csv
fields=['first','second','third']
with open(rpath , 'a') as f:
writer = csv.writer(f)
writer.writerow(fields)
我似乎无法做到这一点,因为参数 r 出现在path之外的参数中。有人可以指导如何做吗?
答案 0 :(得分:1)
在您引用的原始代码段中,r
前缀告诉python将字符串视为原始字符串,并在字符串中保留反斜杠。 (有关详细说明,请参见https://docs.python.org/2/reference/lexical_analysis.html#string-literals)
因此,r只能在诸如r'somestring'
这样的字符串文字之前加上前缀。
在您的示例中,您将变量名称定义为path
。但是后来您将其称为rpath。 rpath
未在代码中的任何位置定义。因此它将引发错误。
您可以将其更改为
with open(path , 'a') as f:
答案 1 :(得分:1)
让我们假设下面是您的new.csv文件,并且您想添加一行new_row
作为CSV的第四行:
$ cat new.csv
SN, Num1, Num2
1, one, two
2, three, four
3, five, six
下面的代码可以做到这一点。
$ cat appendCsv2.py
#!/isr/bin/python3
import csv
new_row =['4', 'first','second','third']
with open('new.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow(new_row)
csvFile.close()
所需的输出:
$ cat new.csv
SN, Num1, Num2
1, one, two
2, three, four
3, five, six
4,first,second,third
别忘了关闭文件!
来自Live Demo for both GCC and Clang 在处理文件对象时,最好使用with关键字。这样做的好处是,即使在执行过程中引发了异常,文件在其套件完成后也将正确关闭。它也比编写等效的try-finally块要短得多:
>>> with open('workfile', 'r') as f:
... read_data = f.read()
>>> f.closed
True
答案 2 :(得分:0)
你是这个意思吗?
import csv
path='/home/user/new.csv'
fields=['first','second','third']
# To prevent newline by writerow(), open with newline=""
with open(path , 'a', newline="") as f:
writer = csv.writer(f)
writer.writerow(fields)