首页 > 程序 > python > 正文

Python读csv文件去掉一列后再写入新的文件
2020-03-09 00:27:26   来源:   评论:0 点击:

用了两种方式解决该问题,都是网上现有的解决方案。

场景说明:

有一个数据文件,以文本方式保存,现在有三列user_id,plan_id,mobile_id。目标是得到新文件只有mobile_id,plan_id。

解决方案

方案一:用python的打开文件写文件的方式直接撸一遍数据,for循环内处理数据并写入到新文件。

代码如下:

复制代码
def readwrite1( input_file,output_file):
    f = open(input_file, 'r')
    out = open(output_file,'w')
    print (f)
    for line in f.readlines():
        a = line.split(",")
        x=a[0] + "," + a[1]+"\n"
        out.writelines(x)
    f.close()
    out.close()
复制代码

方案二:用 pandas 读数据到 DataFrame 再做数据分割,直接用 DataFrame 的写入功能写到新文件

代码如下:

def readwrite2(input_file,output_file):
    date_1=pd.read_csv(input_file,header=0,sep=',')
    date_1[['mobile', 'plan_id']].to_csv(output_file, sep=',', header=True,index=False)

 

从代码上看,pandas逻辑更清晰。

 

下面看下执行的效率吧!

复制代码
def getRunTimes( fun ,input_file,output_file):
    begin_time=int(round(time.time() * 1000))
    fun(input_file,output_file)
    end_time=int(round(time.time() * 1000))
    print("读写运行时间:",(end_time-begin_time),"ms")

getRunTimes(readwrite1,input_file,output_file)  #直接撸数据
getRunTimes(readwrite2,input_file,output_file1) #使用dataframe读写数据
复制代码

读写运行时间: 976 ms
读写运行时间: 777 ms

input_file 大概有27万的数据,dataframe的效率比for循环效率还是要快一点的,如果数据量更大些,效果是否更明显呢?

下面试下增加input_file记录的数量试试,有如下结果

input_file
readwrite1
readwrite2

27W

976 777

55W

1989 1509

110W

4312 3158

 

 

 

 

 

 

从上面测试结果来看,dataframe的效率提高大约30%左右。

https://www.cnblogs.com/kaluxifa/p/8134960.html

 

import csv
变量1 = open('D:\qh2020/data.csv', 'r')#源数据
#out = open("D:\qh2020/data2.CSV",'a+',newline="")
print (变量1)
with open("D:\qh2020/data2.csv",'w',newline="") as 变量2:#整理后数据
    变量3 = csv.writer(变量2)
    变量4 = ["交易日期","商品名称","交割月份","前结算","今开盘","最高价","最低价","收盘价","结算参考价","涨跌1","涨跌2","成交手","持仓手","变化"]
    变量3.writerow(变量4)
    变量2.close()

#追加文件
with open("D:\qh2020/data2.csv",'a+',newline="") as 变量2:
        变量3 = csv.writer(变量2)
        变量5=0

        for 变量6 in 变量1.readlines():
            if 变量5<3:
                #print(变量6)
                z=1+1
            else:
                变量8 = []  ## 空列表
                变量7 = 变量6.split(",")
                #x = [string(a[0])+ "," + string(a[1])]
                #if (变量7[0]!='交割月份')and(变量7[0]!='小计')and(变量7[0]!='小计'):
                if (变量7[0]<="9999")and(变量7[0]!="20号胶"):
                    变量8.append(变量7[0])  ## 使用 append() 添加元素
                    变量8.append(变量7[1])
                    print(变量7[0])
                    变量3.writerow(变量8)
            变量5+=1
变量1.close()
变量2.close()





 

相关热词搜索:

上一篇:python操作CSV、EXCEL网络文章汇总链接
下一篇:Python将一个CSV文件里的数据追加到另一个CSV文件

分享到: 收藏
评论排行