2016-05-16 14:42:01 kellyseeme 阅读数 3750
  • Python入门视频教程

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python入门基础教程:python教程旨在掌握python开发的入门基础用法与其核心操作,便于大家在短时间内可以使用python进行后续的工作与学习。课程内容包括Python环境搭建(Anaconda方式)、变量、List基础结构、List索引、循环结构、判断结构、字典结构、文件处理、函数基础等。

    16978 人正在学习 去看看 唐宇迪

python中读取数据的时候有几种方法,无非是read,readline,readlings和xreadlines几种方法,在几种方法中,read和xreadlines可以作为迭代器使用,从而在读取大数据的时候比较有效果.

在测试中,先创建一个大文件,大概1GB左右,使用的程序如下:

import os.path
import time
while os.path.getsize('messages') <1000000000:
    f = open('messages','a')
    f.write('this is a file/n')
    f.close()

print 'file create complted'

在这里使用循环判断文件的大小,如果大小在1GB左右,那么结束创建文件。--需要花费好几分钟的时间。


测试代码如下:

#22s
start_time = time.time()
f = open('messages','r')
for i in f:
    end_time = time.time()
    print end_time - start_time
    break
f.close()

#22s
start_time = time.time()
f = open('messages','r')
for i in f.xreadlines():
    end_time = time.time()
    print end_time - start_time
    break
f.close()


start_time = time.time()
f = open('messages','r')
k= f.readlines()
f.close()
end_time = time.time()
print end_time - start_time

使用迭代器的时候,两者的时间是差不多的,内存消耗也不是很多,使用的时间大概在22秒作用

在使用完全读取文件的时候,使用的时间在40s,并且内存消耗相当严重,大概使用了1G的内存。。


其实,在使用跌倒器的时候,如果进行连续操作,进行print或者其他的操作,内存消耗还是不可避免的,但是内存在那个时候是可以释放的,从而使用迭代器可以节省内存,主要是可以释放。

而在使用直接读取所有数据的时候,数据会保留在内存中,是无法释放这个内存的,从而内存卡死也是有可能的。


在使用的时候,最好是直接使用for i in f的方式来使用,在读取的时候,f本身就是一个迭代器,其实也就是f.read方法



2018-07-16 10:20:16 weixin_40127170 阅读数 504
  • Python入门视频教程

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python入门基础教程:python教程旨在掌握python开发的入门基础用法与其核心操作,便于大家在短时间内可以使用python进行后续的工作与学习。课程内容包括Python环境搭建(Anaconda方式)、变量、List基础结构、List索引、循环结构、判断结构、字典结构、文件处理、函数基础等。

    16978 人正在学习 去看看 唐宇迪

可以试试下面这个方法:


2018-03-05 10:59:47 IBoyMan 阅读数 529
  • Python入门视频教程

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python入门基础教程:python教程旨在掌握python开发的入门基础用法与其核心操作,便于大家在短时间内可以使用python进行后续的工作与学习。课程内容包括Python环境搭建(Anaconda方式)、变量、List基础结构、List索引、循环结构、判断结构、字典结构、文件处理、函数基础等。

    16978 人正在学习 去看看 唐宇迪
 
###   enumerate(ad_set,start=1)
###   start=1:指定索引起始值
#-*- coding:utf-8 -*-
#唯一号码转家庭、非家庭
#编写者:zqm
#日期:20170810
#功能:分别找出家庭,非家庭用户,家庭的编号转jz编号,非家庭重新编号且相同编号相同
######################################################################
# 备注:
#       File_target_zhengq_temp(临时文件)是处理的文件中的政企数据
#
# 调用方式:python Jzad_jiat_zhengq.py /zqm/处理的文件.txt
#
# 注意:
#      此程序只适用于ad在File_deal文件的第一列,如果不在第一列,请酌情修改程序
####################################################################### 

from datetime import datetime
from sys import argv
import os

#配置文件
File_source = "/JZ_lzy.txt"

#处理文件所在的目录
dir = os.getcwd()+"/"

#要处理的文件
File_deal = argv[1]

if File_deal.find("/") != -1:
        File_deal = argv[1].split("/")[-1]

#临时文件即处理文件里的政企数据
File_target_zhengq_temp = dir+"政企原始数据.txt"

#政企结果文件
File_target_zhengq = dir+"zq_"+File_deal

#家庭结果文件
File_target_jiating = dir+"jt_"+File_deal

print ("程序已开始执行!!!")
print (datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

dist_source = {}
list = []
ad_set = set()
dist2 = {}

def Read_File_source():
        with open(File_source, "r") as ff:
                for line in ff:
                        line = line.strip().split("\t")
                        dist_source[line[0]] = line[1]

def Main_zhengqi():
        with open(File_target_zhengq_temp, "w") as f_write:
                with open(File_deal, "r") as ff:
                        for line in ff:
                                line = line.strip().split("\t")
                                if line[0] not in dist_source:
                                        f_write.write("\t".join(line) + "\n")
                                        ad_set.add(line[0])

        with open(File_target_zhengq_temp,"r") as ff:
                for line in ff:
                        list.append(line)

        with open(File_target_zhengq, "w") as f_write:
                for num,ad in enumerate(ad_set,start=1):
                        dist2[ad] = num
                for line in list:
                        line = line.strip().split("\t")
                        if line[0] in dist2:
                                f_write.write(str(dist2[line[0]])+"\t"+"\t".join(line[1:])+"\n")
        print("政企已完成!!!")
        print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

def Main_jiating():
        with open(File_target_jiating, "w") as f_write:
                with open(File_deal, "r") as ff:
                        for line in ff:
                                line = line.strip().split("\t")
                                if line[0] not in dist_source:
                                        continue
                                line[0] = dist_source[line[0]]
                                f_write.write("\t".join(line) + "\n")
        print("家庭已完成!!!")
        print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

if __name__ == "__main__":
        Read_File_source()
        Main_jiating()
        Main_zhengqi()
        print("程序已完成!!!")
        print(datetime.now().strftime('%Y-%m-%d %H:%M:%S'))


版权声明:原创文章,未经允许不得转载,谢谢。

2014-12-12 17:15:59 liqiang19910328 阅读数 470
  • Python入门视频教程

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python入门基础教程:python教程旨在掌握python开发的入门基础用法与其核心操作,便于大家在短时间内可以使用python进行后续的工作与学习。课程内容包括Python环境搭建(Anaconda方式)、变量、List基础结构、List索引、循环结构、判断结构、字典结构、文件处理、函数基础等。

    16978 人正在学习 去看看 唐宇迪

由于项目需求,需要处理xml的数据,网上找的文章参次不齐,最后还是求助于官方文档,如下:


XML文档的内容为

<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

当XML文档为文件格式时,可以这样来读取

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()


当xml为数据流(字符串)时,可以这样读取

root = ET.fromstring(country_data_as_string)

对于xml的元素和内容,可以这样查看

>>> root.tag
'data'
>>> root.attrib
{}


查看节点及节点属性时,可以这样查看

>>> for child in root:
...   print child.tag, child.attrib
...
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}


查看节点内容,可以这样

>>> root[0][1].text
'2008'

基本的就这些,更多的可以去查阅python的官方文档





2019-12-04 18:02:55 zhiranyouni 阅读数 5
  • Python入门视频教程

    购买课程后,请扫码进入学习群,获取唐宇迪老师答疑 Python入门基础教程:python教程旨在掌握python开发的入门基础用法与其核心操作,便于大家在短时间内可以使用python进行后续的工作与学习。课程内容包括Python环境搭建(Anaconda方式)、变量、List基础结构、List索引、循环结构、判断结构、字典结构、文件处理、函数基础等。

    16978 人正在学习 去看看 唐宇迪

使用Python读取大文件的方法

其实就是采用化整为零的思想,既然大数据那么多,那么我们就一点一点的来处理。

还有
Python多进程分块读取超大文件的方法

一个人不行,那么我就多个人去做么,众人拾柴火焰高

Python处理json数据

阅读数 205

Python处理大文件

阅读数 619

Python数据处理

阅读数 886

没有更多推荐了,返回首页