• 【Python】从文件中读取数据


    从文件中读取数据

    1.1 读取整个文件

    要读取文件,需要一个包含几行文本的文件(文件PI_DESC.txt与file_reader.py在同一目录下

    PI_DESC.txt

    3.1415926535
      8979323846
      2643383279
      5028841971

    file_reader.py

    with open("PI_DESC.txt") as file_object:
        contents = file_object.read()
        print(contents)

    我们可以看出,读取文件时,并没有使用colse()方法,那么未妥善的关闭文件,会不会导致文件收到损坏呢?在这里是不会的,因为我们在open()方法前边引入了关键字with,该关键字的作用是:在不需要访问文件后将其关闭

    1.2文件路径

    程序在读取文本文件的时候,如果不给定路径,那么它会先在当前目录下进行检索,有时候我们需要读取其他文件夹中的路径,例如:

    image

    现在文件PI_DESC.txt存储在文件夹txt中

    那么我们读取文本内容的代码得修改为:

    with open("txtPI_DESC.txt") as file_object:
        contents = file_object.read()
        print(contents)

    给open参数传递的参数得给相对路径

    Linux与OS X中,路径使用斜杠(/)

    Windows中,使用反斜杠(),但是由于python中,反斜杠被视为转义字符,在Windows最好在路径开头的单(双)引号前加上r

    相对路径:即相对于程序文件的路径

    绝对路径:即文本在硬盘上存储的路径

    使用绝对路径的程序怎么写呢 ?

    with open(r"D:python	xtPI_DESC.txt") as file_object:
        contents = file_object.read()
        print(contents)

    1.3逐行读取

    读取文件时,可能需要读取文件中的每一行,要以每一行的方式来检查文件或者修改文件,那么可以对文件对象使用for循环

    file_path = 'txtPI_DESC.txt'
    with open(file_path) as file_object:
        for line in file_object:
            print(line)

    程序运行结果如下:

    image

    通过运行结果我们可以看出,打印结果中间有很多空白行,这些空白行是怎么来的呢?因为在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加一个换行符,因此每行末尾就有2个换行符:一个来自文件,另外一个来自print,消除这些换行符,只需要使用方法rstrip()

    file_path = 'txtPI_DESC.txt'
    with open(file_path) as file_object:
        for line in file_object:
            print(line.rstrip())

    打印结果

    image

    1.4创建一个包含文件各行内容的列表

    使用关键字with时,open()返回的文件对象只能在with代码块可用,如果要在with代码块外访问文件的内容,可在with块中将文件各行存储在一个列表,并在with代码块外使用该列表

    file_path = 'txtPI_DESC.txt'
    with open(file_path) as file_object:
        lines = file_object.readlines()
    for line in lines:
        print(line.rstrip())

    1.5使用文件的内容

    在上面一节中我们提到把数据提取到内存中,那么我们就可以对数据进行随心所欲的操作了

    需要:将圆周率连在一起打印出来(删除空格),并打印其长度

    file_path = 'txtPI_DESC.txt'
    with open(file_path) as file_object:
        lines = file_object.readlines()
    
    pi_str = ''
    for line in lines:
        pi_str += line.strip()
    print(pi_str.rstrip())
    print(len(pi_str.rstrip()))

    注意最后print语句并没有缩进,如果是缩进的话就会每取一行打印一次

    打印效果如下

    image

    1.5大文件的读取

    在这里我先用圆周率前10000位做实验,也算不上大文件,只是相对来说是大文件

    附件下载地址:点击下载

    为了不显示圆周率一万位,造成console不停的闪烁,我们只显示前20位

    file_path = 'txtPI_DESC.txt'
    with open(file_path) as file_object:
        lines = file_object.readlines()
    
    pi_str = ''
    for line in lines:
        pi_str += line.strip()
    print(pi_str[:20].lstrip())
  • 相关阅读:
    从零开始,使用python快速开发web站点(1)
    实现ListView A~Z快速索引
    红黑树-Python实现
    折扣&折让-看清实质的思考
    【机器学习】初步理解:随机森林
    hdu-4611-Balls Rearrangement
    【经典算法】基本的排序算法:插入排序
    hdu 4620 Fruit Ninja Extreme(状压+dfs剪枝)
    【Java&Android开源库代码剖析】のAndroid-Universal-Image-Loader-part1
    从零开始,使用python快速开发web站点(2)
  • 原文地址:https://www.cnblogs.com/OliverQin/p/7895887.html
Copyright © 2020-2023  润新知