精华内容
下载资源
问答
  • python读取文件最后一两种方式1)常规方法:从前往后依次读取步骤:open打开文件。读取文件,把文件所有读入内存。遍历所有,提取指定的数据。优点:简单,方便缺点:当文件大了以后时间太慢,无法忍受2)...

    python读取文件最后一行两种方式

    1)常规方法:从前往后依次读取

    步骤:open打开文件。

    读取文件,把文件所有行读入内存。

    遍历所有行,提取指定行的数据。

    优点:简单,方便

    缺点:当文件大了以后时间太慢,无法忍受

    2)推荐方法:

    步骤:open打开日志文件。

    移动文件读取指针到文件末尾。

    从后往前移动指针直到合适的位置。

    读取文件,提取指定行的数据。

    优点:时间相对固定,适合处理大文件

    代码实现

    fname = 'test.html'

    with open(fname, 'r', encoding='utf-8') as f: # 打开文件

    lines = f.readlines() # 读取所有行

    first_line = lines[0] # 取第一行

    last_line = lines[-1] # 取最后一行

    print('文件' + fname + '第一行为:'+ first_line)

    print('文件' + fname + '最后一行为:' + last_line)

    with open(fname, 'rb') as f: # 打开文件

    # 在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始,只能seek(offset,0)

    first_line = f.readline() # 取第一行

    offset = -50 # 设置偏移量

    while True:

    """

    file.seek(off, whence=0):从文件中移动off个操作标记(文件指针),正往结束方向移动,负往开始方向移动。

    如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。

    """

    f.seek(offset, 2) # seek(offset, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50)

    lines = f.readlines() # 读取文件指针范围内所有行

    if len(lines) >= 2: # 判断是否最后至少有两行,这样保证了最后一行是完整的

    last_line = lines[-1] # 取最后一行

    break

    # 如果off为50时得到的readlines只有一行内容,那么不能保证最后一行是完整的

    # 所以off翻倍重新运行,直到readlines不止一行

    offset *= 2

    print('文件' + fname + '第一行为:' + first_line.decode())

    print('文件' + fname + '最后一行为:' + last_line.decode())

    展开全文
  • 本文要点刚要:(一)读文本文件格式的数据函数:read_csv,read_table1.读不同分隔符的文本文件,用参数sep2.读无字段名(表头)的文本...()将数据写成文本文件格式函数:to_csv范例如下:(一)读取文本文件格...

    本文要点刚要:

    (一)读文本文件格式的数据函数:read_csv,read_table

    1.读不同分隔符的文本文件,用参数sep

    2.读无字段名(表头)的文本文件 ,用参数names

    3.为文本文件制定索引,用index_col

    4.跳行读取文本文件,用skiprows

    5.数据太大时需要逐块读取文本数据用chunksize进行分块。

    (二)将数据写成文本文件格式函数:to_csv

    范例如下:

    (一)读取文本文件格式的数据集

    1.read_csv和read_table的区别:

    #read_csv默认读取用逗号分隔符的文件,不需要用sep来指定分隔符

    import pandas as pd

    pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.csv')

    1368336-20180426224121292-979964237.png

    #read_csv如果读的是用非逗号分隔符的文件,必须要用sep指定分割符,不然读出来的是原文件的样子,数据没被分割开

    import pandas as pd

    pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt')

    1368336-20180426224144868-1760190149.png

    #与上面的例子可以对比一下区别

    import pandas as pd

    pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|')

    1368336-20180426224410679-520935790.png

    #read_table读取文件时必须要用sep来指定分隔符,否则读出来的数据是原始文件,没有分割开。

    import pandas as pd

    pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.csv')

    1368336-20180426224501340-507311282.png

    #read_table读取数据必须指定分隔符

    import pandas as pd

    pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|')

    1368336-20180426224605645-1046616757.png

    2.读取文本文件时不用header和names指定表头时,默认第一行为表头

    #用header=None表示数据集没有表头,会默认用阿拉伯数字填充表头和索引

    pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|',header=None)

    1368336-20180426224759907-1866915755.png

    #用names可以自定义表头

    pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|',

    names=['x1','x2','x3','x4','x5'])

    1368336-20180426224858254-1016291189.png

    3.默认用阿拉伯数字指定索引;用index_col指定某一列作为索引

    names=['x1','x2','x3','x4','x0']

    pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|',

    names=names,index_col='x0')

    1368336-20180426225022347-270755606.png

    4.以下示例是用skiprows将hello对应的行跳过后读取其他行数据,不管首行是否作为表头,都是将表头作为第0行开始数

    可以对比一下三个例子的区别进行理解

    pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data1.txt')

    1368336-20180426225126273-1981446421.png

    names=['x1','x2','x3','x4','x0']

    pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data1.txt',names=names,

    skiprows=[0,3,6])

    1368336-20180426225208651-941727855.png

    pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data1.txt',

    skiprows=[0,3,6])

    1368336-20180426225257812-1841733706.png

    pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data1.txt',header=None,

    skiprows=[0,3,6])

    1368336-20180426225330405-1103613451.png

    5.分块读取,data1.txt中总共8行数据,按照每块3行来分,会读3次,第一次3行,第二次3行,第三次1行数据进行读取。

    注意这里在分块的时候跟跳行读取不同的是,表头没作为第一行进行分块读取,可通过一下两个例子对比进行理解。

    chunker = pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data1.txt',chunksize=3)

    for m in chunker:

    print(len(m))

    print m

    1368336-20180426225501813-266640696.png

    chunker = pd.read_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data1.txt',header=None,

    chunksize=3)

    for m in chunker:

    print(len(m))

    print m

    1368336-20180426225607037-1448990798.png

    (二)将数据写入文本格式用to_csv

    以data.txt为例,注意写出文件时,将索引也写入了

    data=pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|')

    print data

    1368336-20180426225716866-1303984639.png

    #可以用index=False禁止索引的写入。

    data=pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|')

    data.to_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\outdata.txt',sep='!',index=False)

    1368336-20180426225814894-925833732.png

    #可以用columns指定写入的列

    data=pd.read_table('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\data.txt',sep='|')

    data.to_csv('C:\Users\xiaoxiaodexiao\pythonlianxi\test0424\outdata2.txt',sep=',',index=False,

    columns=['a','c','d'])

    1368336-20180426225838900-1320029810.png

    展开全文
  • Python读取txt文件最后一(大文件 + 小文件) 本文转载自https://www.cnblogs.com/zhangchenliang/p/8136958.html txt文件小 file_name = 'test.txt' with open(file_name, 'r') as f: # 打开文件 lines = f....

    Python读取txt文件最后一行(大文件 + 小文件)

    本文转载自https://www.cnblogs.com/zhangchenliang/p/8136958.html

    txt文件小

    file_name = 'test.txt'
    with open(file_name, 'r') as f:	  # 打开文件
      lines = f.readlines()			  # 读取所有行
      first_line = lines[0]     # 取第一行
      last_line = lines[-1]     # 取最后一行
      print('文件' + file_name + '第一行为:' + first_line)
      print('文件' + file_name + '最后一行为:' + last_line)
    

    当文件很大时,采用这种方法不可行,资源浪费太大,采用下面方案。

    txt文件大

    file_name = 'log.txt'
    # 判断文件是否已有数据
    if not os.path.getsize(file_name):
    	raise Exception('文件没有内容!')
    with open(file_name, 'rb') as f:  # 以二进制方式打开文件
        first_line = f.readline()     # 读第一行
        off = -50     # 设置偏移量,偏移量不能太大,如果太大会报错
        while True:
            f.seek(off, 2)  # seek(off, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50)
            lines = f.readlines()  # 读取文件指针范围内所有行
            if len(lines) >= 2:  # 判断是否最后至少有两行,这样保证了最后一行是完整的
                last_line = lines[-1]  # 取最后一行
                break
            # 如果off为50时得到的readlines只有一行内容,那么不能保证最后一行是完整的
            # 所以off翻倍重新运行,直到readlines不止一行
            off *= 2
        first_line = first_line.decode('utf8')
        last_line = last_line.decode('utf8')
        print('文件 ' + file_name + '第一行为:' + first_line)
        print('文件 ' + file_name + '最后一行为:' + last_line)
    
    展开全文
  • I am making a program that reads time values and readings from a .txt file and plots them on a web-page with matplotlib. In my case there are lots of values, and the plot can look very confusing, and ...

    1586010002-jmsa.png

    I am making a program that reads time values and readings from a .txt file and plots them on a web-page with matplotlib. In my case there are lots of values, and the plot can look very confusing, and with thousands of data points it can also be sluggish.

    I am currently reading the .txt lines with this code to put the values into plottable lists:

    with open('C:/Email/file.txt') as f:

    lines = f.readlines()

    dates = [str(line.split(';')[0]) for line in lines]

    y = [float(line.split(';')[1]) for line in lines]

    z = [float(line.split()[2]) for line in lines]

    The .txt file content looks like this:

    30.05.18_12:27:17; 13.0; -0.0

    30.05.18_12:27:18; 14.0; -0.0

    30.05.18_12:27:19; 15.0; -0.0

    30.05.18_12:27:20; 16.0; -0.0

    So, is there any way to read and plot every Nth (for example every 30. would be ideal) timestamp and value?

    I've been researching different ways but they seem confusing.

    One solution that I was thinking about is to make a counter that counts the amount of read lines, then when the counter is 30, skip 30 the next lines and read and plot the data in line 31. I have no idea how to do this, since I am relatively new to Python.

    Help would be appreciated.

    Just in case, the whole code here:

    from flask import Flask

    import numpy as np

    import matplotlib.pyplot as plt, mpld3

    from datetime import datetime

    app = Flask(__name__)

    @app.route("/")

    def hello():

    with open('C:/Email/file.txt') as f:

    lines = f.readlines()

    dates = [str(line.split(';')[0]) for line in lines]

    y = [float(line.split(';')[1]) for line in lines]

    z = [float(line.split()[2]) for line in lines]

    date = [datetime.strptime(x,'%d.%m.%y_%H:%M:%S') for x in dates]

    plt.figure(figsize=(10,5))

    plt.title('Temperature', fontsize=15)

    plt.ylabel('Temperature' + u'℃', fontsize=15)

    plt.plot_date(date, y, 'r-', label='quadratic')

    plt.ylim([10,35])

    # Print as HTML

    return mpld3.show()

    if __name__ == "__main__":

    app.run()

    EDIT: HUGE THANKS TO MR. F-ROCHE

    Got it working with the following code:

    @app.route("/")

    def hello():

    with open('C:/Email/file.txt') as f:

    # Counts lines in text (Use later to delete lines every X readings)

    # lines = f.readlines()

    cpt = 0

    all_lines = []

    for line in f:

    cpt += 1

    if cpt == 30:

    all_lines.append(line)

    cpt = 0

    dates = [str(line.split(';')[0]) for line in all_lines]

    date = [datetime.strptime(x,'%d.%m.%y_%H:%M:%S') for x in dates]

    y = [float(line.split(';')[1]) for line in all_lines]

    z = [float(line.split()[2]) for line in all_lines]

    plt.figure(figsize=(10,5))

    plt.title('Temperature', fontsize=15)

    plt.ylabel('Temperature' + u'℃', fontsize=15)

    plt.plot_date(date, y, 'r-', label='quadratic')

    plt.ylim([10,35])

    # Print as HTML

    return mpld3.show()

    解决方案

    Something like that will only display every 30 lines:

    with open('C:/Email/file.txt') as f:

    cpt = 0

    for line in f:

    cpt += 1

    if cpt == 30:

    print(line)

    cpt = 0

    you can put line variable in a list like this:

    all_lines = []

    ...

    all_lines.append(line)

    EDIT: or even better with one line of code:

    with open('C:/Email/file.txt') as f:

    all_lines = [v for i, v in enumerate(f, start=1) if i % 30 == 0]

    Then you can apply that to dates, y and z instead.

    展开全文
  • txt文件小#coding:utf-8 ...输出为:文件第和最后一 '''fname = 'test.txt' with open(fname, 'r') as f: #打开文件 lines = f.readlines() #读取所有 first_line = lines[0] #取第一 last_line = lines[-
  • [work] python读取txt文件最后一

    千次阅读 2019-01-11 11:57:46
    txt文件小 ...输出为:文件第和最后一 ''' fname = 'test.txt' with open(fname, 'r') as f: #打开文件 lines = f.readlines() #读取所有 first_line = lines[0] #取第一 last_line = l...
  • python读取txt文件,写入txt文件 一、读取txt文件 方法一: import numpy as np file = open("../data/track_data.txt","r") list = file.readlines()#每一数据写入到list中 print(list) lists = [] #将...
  • python读取txt文件并画图

    万次阅读 多人点赞 2017-12-17 22:31:41
    1,使用python读取txt文件已知txt文件内容如下: 0 0 1 1 2 4 3 9 4 16 5 25 6 36请以第一列为x轴,第二列为y轴画图 步骤如下: 1)使用readlines读取文件 2)建立两个空列表X,Y,将第一列的数字放入X,...
  • 我有一个文本文件(textfile1.txt),有几行例子:123This is the line 1This is the line 2This is the line 3我可以在python脚本中以书面形式返回文本文件的所有内容:123456def textFile1(self):my_file = open(&...
  • 如何用python循环读取下面.txt文件中,用红括号标出来的数据呢?首先,观察数据可知,不同行的一个数据元素不一样,所以考虑直接用正则表达式。再加上,对读和写文件的操作,就了注:我用的是pycharm+python2.7...
  • 文件: 代码: try: file=open('food.txt',"r") #以读模式打开文件 ...except FileNotFoundError: #如果文件不存在,给提示 ... contents=file.readlines() #读取全部 for conten...
  • 广告关闭2017年12月,云+社区对外发布...pos = pos - 1 try: f.seek(pos, 2) #从文件末尾开始读 if f.read(1) == n:break except: #到达文件第,直接读取,退出 f.seek(0, 0) print f.readline().strip() retur...
  • python 读取txt文件

    2021-01-26 11:55:10
    如果指定读取长度,会按照长度去读取,不指定默认读取所有数据 content=file_handle.read(20) print(content) 2.2readline(int)函数 第二种读取方式: readline(int)函数 默认读取文件数据 content=file_handle....
  • 对于python2.7字符串在Python2.7内部的表示是unicode编码,因此,在做编码...先用一些编辑器(如editplus )看一下你的txt文件保存的是utf-8,还是gb2312或其他的。当你读时可以这样line = (file1.readline()).dec...
  • 原文地址:http:www.zisexinghen.cnlikeshare322.html一、问题:python读取文件时会遇到乱码的问题? 、解决方法:1、已utf-8格式打开文档f =open(re:pythonliaotian.txt,r,encoding=utf-8)f.se...
  • 本文实例讲述了Python实现读取文件最后n的方法。分享给大家供大家参考,具体如下:# -*- coding:utf8-*-import osimport timeimport datetimeimport mathimport stringdef get_last_line(inputfile) :filesize = ...
  • 本文要点刚要:(一)读文本文件格式的数据函数:read_csv,read_table1.读不同分隔符的文本文件,用参数sep2.读无字段名(表头)的文本...()将数据写成文本文件格式函数:to_csv范例如下:(一)读取文本文件格...
  • 菜鸟笔记首先读取txt文件如下:AAAAF110 0003E818 0003E1FC 0003E770 0003FFFC 90AAAAF110 0003E824 0003E208 0003E76C 0003FFFC A5AAAAF110 0003E814 0003E204 0003E760 0003FFFC 85AAAAF110 0003E7F0 0003E208 ...
  • 本文实例讲述了Python实现读取文件最后n的方法。分享给大家供大家参考,具体如下:# -*- coding:utf8-*-import osimport timeimport datetimeimport mathimport stringdef get_last_line(inputfile) :filesize = ...
  • Python 读取TXT文件

    千次阅读 2017-02-10 11:08:12
    一、打开文件f = open(filename,access_mode='r',buffering=-1)filename:文件名 access_mode:打开方式,r读,w写,a追加,r+ w+ a+ 都是以...、对文件进行操作 将文件中的内容读入到一个字符串变量/列表中 函数
  • 菜鸟笔记首先读取txt文件如下:AAAAF110 0003E818 0003E1FC 0003E770 0003FFFC 90AAAAF110 0003E824 0003E208 0003E76C 0003FFFC A5AAAAF110 0003E814 0003E204 0003E760 0003FFFC 85AAAAF110 0003E7F0 0003E208 ...
  • python读取txt文件(多种方法)

    万次阅读 多人点赞 2020-06-20 20:13:26
    原始数据:唐诗一百首.txt 方法1: f=open('唐诗一百首.txt', encoding='gbk') txt=[] for line in f: txt.append(line.strip()) ...line = f.readline().strip() #读取第 txt=[] txt.append(line) while li
  • 菜鸟笔记首先读取txt文件如下:AAAAF110 0003E818 0003E1FC 0003E770 0003FFFC 90AAAAF110 0003E824 0003E208 0003E76C 0003FFFC A5AAAAF110 0003E814 0003E204 0003E760 0003FFFC 85AAAAF110 0003E7F0 0003E208 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 202,915
精华内容 81,166
关键字:

python读取txt文件第二行

python 订阅