使用Python从一个CSV文件提取指定数据并赋值给另一个CSV文件
我有一个csv文件,里面的数据长这样:
我想从C列提取数据,然后把这些数据写入一个新的csv文件,格式如下:
所以我需要做两件事:
- 在第一行第一列写上'node'和数字1到22(因为在这个例子中,输入csv的A列里有22个重复的循环)
- 我已经从C列提取了数据,并写入输出csv,像这样:
我需要每22行转置一次这些数据,并从Excel的B2位置开始填入,然后是B3、B4等等。
很明显,我必须遍历每一行才能高效地完成这个任务,但我不知道怎么在Python中使用csv模块。
我需要下载xlrd包吗,还是只用内置的csv模块就可以处理这个问题?
我正在使用Python 2.7.6和Windows 8.1 x64下的pyscripter。欢迎给我任何建议,非常感谢!
1 个回答
1
阅读一下Python的csv文档。
用csv读取器遍历行的简单方法:
import csv
X = []
spamreader = csv.reader('path_to_file/filename.csv',delimiter=',')
for row in spamreader:
X.append(row)
这段代码会创建一个变量,里面存放了所有的csv数据。由于你的文件结构,读取起来可能会有点困难,因为单元格之间用','来分隔,但每个单元格内也有多个逗号,而且由于有括号,里面会混合字符串和数字数据,这样就需要进行一些清理。如果你能重新格式化csv文件,可能会更简单,比如让每个单元格看起来像1,2,0.01,而不是(1,2,0.01)。你也可以考虑使用其他的分隔符,比如';'。
如果不能这样做,那就要准备进行一些繁琐的数据清理,记得好好阅读上面链接的文档。
编辑:试试下面的代码
import csv
X = []
with open('path_to_file/filename.csv','rb') as csvfile:
spamreader = csv.reader(csvfile,delimiter=',')
for row in spamreader:
rowTemp = []
for i in range(len(row)):
if (i+1)%3==0: #gets every third cell
rowTemp.append(row[i])
X.append(rowTemp)
这段代码会生成一个包含所有距离值的矩阵。然后试试:
with open('path_to_output_file/output_file.csv','wb') as csvfile:
spamwriter = csv.writer(csvfile,delimter=',')
for sublist in X:
spamwriter.writerow(sublist)
不确定这是否正是你想要的,但应该差不多。它会输出一个去掉所有节点对的csv文件。