科研03——python如何对csv文件进行读写操作
- 写文件
- 读文件
- 最后
写文件
实现代码:
import csv
shuchu = []
shuchu.append(baseline.frequency)
shuchu.append(costd[-1])
shuchu.append(delayd[-1])
with open('cost_delay2.csv', 'a', newline='') as f2:
writer = csv.writer(f2)
writer.writerow(shuchu)
- 这里面的
'a'
意思为追加,即“接着上次的写”,类似的,还有'w'
和'r'
,分别意思为写和读,这里的写为覆盖的那种写 -
writer.writerow(shuchu)
是一行一行写,writer.writerows(shuchu)
是多行写入,比如,如果shuchu
是个二维数组,那一行一行写就太费劲,所以这时候就需要writer.writerows()
,我在最开始写V2V adaptive data rate的程序的时候就是用的这个来写入的 - 注意,从字面意思都可以看出来
writer.writerow()
和writer.writerows()
这两个方法是对列表(list)等其他可迭代变量进行操作的,那如果只是写一个值呢?就需要像上面的程序一样,虽然只想要costd[-1]
这一个值,但是却需要把这个值先写入一个列表,然后写入文件
读文件
以读下面的表格为例说明
实现代码:
import pandas as pd
ad = pd.read_csv("./cost_delay2.csv",)
print(ad)
address = pd.read_csv("./cost_delay2.csv",header = None)
print(address)
address0 = pd.read_csv("./cost_delay2.csv",header = None,usecols = [0])
print(address0)
address1 = pd.read_csv("./cost_delay2.csv",header = None,usecols = [1])
print(address1)
address2 = pd.read_csv("./cost_delay2.csv",header = None,usecols = [2])
print(address2)
print(address2.head(2))
输出:
2 495 3.033333333
0 3 691.250 2.550000
1 4 789.375 2.308333
2 5 926.750 1.970000
0 1 2
0 2 495.000 3.033333
1 3 691.250 2.550000
2 4 789.375 2.308333
3 5 926.750 1.970000
0
0 2
1 3
2 4
3 5
1
0 495.000
1 691.250
2 789.375
3 926.750
2
0 3.033333
1 2.550000
2 2.308333
3 1.970000
2
0 3.033333
1 2.550000
- 从
ad
输出结果中可以看出,默认的输出是把表格的第一行的元素认为是表头了,然后左边自动添加了默认的行编号“0,1,2” - 从
address
输出结果中可以看出,header = None
的功能是取消列的表头,而使用像行一样的默认的表头,从而避免数据的错放 - 从
address
输出结果中可以看出,usecols = [i]
这个参数是按照索引输出对应的列,这些列就是列表(list),是可以作图的时候作为x和y轴的 - 从
address2.head(2)
输出结果中可以看出,address2.head(2)
的意义是输出前两行
最后
- 要注意用好哔哩哔哩这些工具来找
- 另一个文件的全局变量也是可以用
baseline.frequency
来读出来的,这就意味着全局变量也可以跨文件使用,其实是导包,并不是常规意义上的直接使用 - 对文件的操作中,普适的是:一个点是当前目录 两个点是上级目录,比如
./cost_delay2.csv
和../cost_delay2.csv
的样子
两篇可以参考的文章
- CSV文件在Python中的几种处理方式
- python读取csv文件的某一列或某几列