Python 3.6。
Python的新手......第一篇文章要温柔......
我无法绕过这个...... 如标题中所述,我有CSV格式的数据,我需要写入具有可变文件名的CSV文件。
目前我的代码使用适当的文件名创建CSV,并将数据写入CSV,但每行的数据为1个字母。
代码如下:
import csv
filename = os.environ['USERPROFILE'] + '\Downloads\Somefolder\\'+ variablefilename + '.csv'
myfile = open(filename, 'w', newline='')
with myfile:
writer = csv.writer(myfile)
writer.writerows(csvformatteddata.decode('utf-8'))
#csvformatteddata was generated prior to this code.
非常感谢任何帮助,但如果可能的话,我想用“解决方案”代码进行解释。
我希望学习/成长,而不是启用我的无知。
答案 0 :(得分:0)
writerows
期望包含每行数据的可迭代迭代,其中“内部”可迭代的i
元素是第i
列的内容。一个。看起来csvformatteddata
是一个字符串。 (我猜它看起来像a,b,c\nd,e,f\n...
。)
详细说明,你在每一行上获得一个字符的原因是一个长字符串本身是一个可迭代的迭代字符串 - 迭代字符串然后你得到一个单独的字符并迭代该字符以获得相同的字符串字符。因此每个角色都变成了“行”。
答案 1 :(得分:0)
这对我有用。
In [1]: import csv
In [2]: with open('text.csv', 'r') as old_file:
...: with open('new.csv', 'w') as new_file:
...: reader = csv.reader(old_file)
...: writer = csv.writer(new_file)
...: writer.writerows(reader)
...:
In [3]:
答案 2 :(得分:0)
由于您的数据是单个字符串,因此您应按照csv
模块documentation中的说明将其拆分为多行。
如果您自己构建了字符串,请不要这样做。只需让CSV编写器处理分隔符和换行符。
因此,csv.writer
执行此操作时,您的数据应如下所示:
[['a', 'b', 'c'], ['d', 'e', 'f']]
这样你就可以正常编写CSV文件了:
$ python3
>>> import csv
>>> csvformatteddata = [['a','b','c'], ['d', 'e', 'f']]
>>> myfile = open('test.csv', 'w')
>>> writer = csv.writer(myfile)
>>> writer.writerows(csvformatteddata)
>>> myfile.close()
^D
$ cat test.csv
a,b,c
d,e,f