zoukankan      html  css  js  c++  java
  • python 关于文件操作的一些理解

    在用python进行数据处理编程中,往往涉及到文件IO口读写,IO口的读写性能会极大的影响程序的运行时间。在进行文件写入时,一般会存在两种情况。第一种是数据到来马上进行数据写入,即来一条写一条,第二种是数据到来时先存储到内存中,等到数据量存储到一定程度时,再一次性写入文件中。那么,这两种情况孰优孰劣?下面用一个例子展示给大家。

    先看第二种情况,程序演示的是:第一次读取1万条数据,存储在列表中,再一次性存储到文件中。每存一万条数据的时间是3.1秒。

    #-*- coding: utf-8 -*-
    #先读取1万条数据再保存
    import os
    import time
    
    filename="E:/datacastle/test_file/new.txt"
    t=time.time()
    data=[]
    count =0 
    while True:  
            with open("E:/datacastle/test_file/train_data/20140803_train.txt",'r') as f:
                    with open(filename,'a') as F:
                            line = f.readline()
                            data.append(line)
                            count +=1
                            if count==10000:
                                    print(time.time()-t)
                                    F.writelines(data)
                                    count=0
                                    data=[]
                                    t=time.time()
    raw_input("over")  

     每存储1万条数据的运行时间如下:

    C:UsersAdministrator>python  E:datacastle	est_file
    ead_big_file.py
    >>3.18099999428
    >>3.13100004196
    >>3.12999987602
    >>3.14100003242

    再看第二种情况,每读一条数据就存储一条数据,每存储一万条运行的时间约为5秒

    #-*- coding: utf-8 -*-
    #读一条存一条
    import os
    import time
    
    filename="E:/datacastle/test_file/new.txt"
    t=time.time()
    data=[]
    count =0 
    
    while True:  
            with open("E:/datacastle/test_file/train_data/20140803_train.txt",'r') as f:
                    with open(filename,'a') as F:
                            line = f.readline()
                            F.writelines(line)
                            count +=1
                            if count==10000:
                                    print(time.time()-t)
                                    count=0
                                    t=time.time()

    每存储1万条数据的运行时间如下:

    C:UsersAdministrator>python  E:datacastle	est_file
    ead_big_file.py
    >>4.4889998436
    >>4.70700001717
    >>4.90199995041
    >>4.48600006104
    >>5.55800008774
    >>5.29799985886
  • 相关阅读:
    计算机网络通信
    javap查看class文件
    JDK动态代理与CGLib动态代理
    error the @annotation pointcut expression is only supported at Java 5 compliance
    redis清空缓存
    利用HttpURLConnection发送请求
    linux下用命令导出mysql表数据
    adb push和pull使用
    mysqld.exe占比cpu 100% 解决方案
    养成好习惯
  • 原文地址:https://www.cnblogs.com/mangojun/p/10976971.html
Copyright © 2011-2022 走看看