科研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的样子
两篇可以参考的文章