GVKun编程网logo

如何从头开始从python文件中读取行(python 读取文件某几行)

20

本文将分享如何从头开始从python文件中读取行的详细内容,并且还将对python读取文件某几行进行详尽解释,此外,我们还将为大家带来关于Python3读取行内缺少对象的json文件、python–以

本文将分享如何从头开始从python文件中读取行的详细内容,并且还将对python 读取文件某几行进行详尽解释,此外,我们还将为大家带来关于Python 3读取行内缺少对象的json文件、python – 以4个为一组从HUGE文本文件中读取行、python-从文件中读取数据、python:从压缩的文本文件中读取行的相关知识,希望对你有所帮助。

本文目录一览:

如何从头开始从python文件中读取行(python 读取文件某几行)

如何从头开始从python文件中读取行(python 读取文件某几行)

我需要知道如何从python文件中读取行,以便首先读取最后一行并以这种方式继续进行操作,直到光标到达文件的开头为止。有任何想法吗?

答案1

小编典典

通过至少三种方法可以解决此问题的一般方法,即按行反向反向读取文本文件。

普遍的问题是,由于每行的长度可以不同,因此您无法事先知道文件中每行的起始位置,也不知道其中有多少行。这意味着您需要对问题应用一些逻辑。

通用方法#1:将整个文件读入内存

使用这种方法,您只需将整个文件读入内存中,就可以采用某种数据结构,该数据结构随后允许您反向处理行列表。堆栈,双向链表甚至数组都可以做到这一点。

优点: 真正易于实现(据我所知可能内置于Python中)
缺点: 占用大量内存,可能需要一段时间才能读取大文件

通用方法2:读取整个文件,存储行的位置

使用这种方法,您还可以读取整个文件一次,但是,不是将整个文件(所有文本)存储在内存中,而是仅将二进制位置存储在文件中每行开始的位置。您可以将这些位置存储在与第一种方法中存储行的位置相似的数据结构中。

如果您想读取X行,则必须从文件中重新读取该行,并从该行开头的存储位置开始。

优点: 几乎与第一种方法一样容易实现
缺点: 可能需要一段时间才能读取大文件

通用方法3:反向读取文件,然后“将其数字化”

使用这种方法,您将从头开始逐块或类似地读取文件,并查看两端在哪里。您基本上有一个缓冲区,例如4096个字节,并处理该缓冲区的最后一行。当必须在该缓冲区中一次向后移动一行的处理到达该缓冲区的开始时,您需要从读取的第一个缓冲区之前的区域读取另一个有价值的数据,然后继续进行处理。

这种方法通常更为复杂,因为您需要处理以下情况:行在两个缓冲区上折断,而长行甚至可能覆盖两个以上的缓冲区。

但是,这是需要最少内存的应用程序,对于真正的大文件,这样做也可能值得避免首先读取千兆字节的信息。

优点: 占用很少的内存,不需要您先阅读整个文件
缺点: 很难实现,并且适合所有极端情况


网上有许多链接显示了如何执行第三种方法:

  • ActiveState Recipe 120686-向后读取文本文件
  • ActiveState食谱439045-向后读取文本文件(还有另一个实现)
  • Top4Download.com脚本-向后读取文本文件

Python 3读取行内缺少对象的json文件

Python 3读取行内缺少对象的json文件

我正在阅读具有以下结构的json文件:

[{"id":1,"gender":"Male","first_name":"Andrew","last_name":"Scott","email":"ascott0@shutterfly.com","ville":"Connecticut"},{"id":3,"first_name":"Mary","last_name":"Richards","email":"mrichards2@japanpost.jp","ville":"Minnesota"}]

所以,你可以在第二个“行”中看到字段“性别”它不存在.我意识到因为我的代码读取文件在这一行出错了.

我的代码:

import json

def jsonreader():
##Reader for json files
    ##Open files using json library
    with open('cust_data.json') as file:
        data = json.load(file)
    resultlist = list()
    for line in data:
        print(line["id"],line["gender"])

我收到了错误: –

C:/xxxxx/x.py
1 Male
Traceback (most recent call last):
2 Female
File "C:/xxxxx/x",line 67,in <module>
jsonreader()
File "C:/xxxxx/x",line 56,in jsonreader
print(line["id"],line["gender"])
KeyError: 'gender'

在回答之前,你应该知道我有一种方法来定义“性别”中的默认值,瞧我的方法:

def definegender(x):
    if x is None:
        x = 'unkNown'
        return x
    elif (x =='Male') or (x=='Female'):#not None:
        return {
         'Male':'M','Female': 'F'
        }.get(x)
    else:
        return x

因此,在这种情况下,我无法使用类似读取值的默认值,因为我需要向我的方法发送一些值.

当你们缺少对象时,你们中的一些人会知道应该如何阅读这种文件的最佳方法.谢谢

解决方法

虽然这已经有了完美的答案,但我的观点是,也可以有替代品.所以这里是:

for line in data:
    try:
        print(line["id"],line["gender"])
    except KeyError:
        print(line["id"],"Error!!! no gender!")

这称为ErrorHandling.阅读文档:
https://docs.python.org/3.6/tutorial/errors.html

更新:你的意思是这个?
update2纠正了错误

try:
    gender = definegender(line["gender"])
except KeyError:
    gender = definegender(None)
print(line["id"],gender)

update3 :(以备将来使用)

as .get()默认情况下返回None,最简单的解决方案是

gender = definegender(line.get("gender"))
print(line["id"],gender)

python – 以4个为一组从HUGE文本文件中读取行

python – 以4个为一组从HUGE文本文件中读取行

几天后我遇到了 python问题.我是一名没有基本编程技能的生物信息学,我正在使用我必须处理的大文本文件(约25gb).

我必须逐行读取txt文件,每组4行,这意味着必须读取和处理前4行,然后我必须读取第2组4行,依此类推.

显然我不能使用readlines()运算符,因为它会使我的内存过载,我必须使用4行中的每一行进行一些字符串识别.

我考虑过使用带有范围运算符的for循环:

openfile = open(path,’r’)

对于范围内的elem(0,len(openfile),4):

line1 = readline()
line2 = readline()
line3 = readline()
line4 = readline()
(process lines...)

不幸的是,这是不可能的,因为处于“读取”模式的文件不能被迭代并被视为列表或字典.

任何人都可以帮忙正确地循环吗?

提前致谢

解决方法

有一种方法可以在Python here中懒惰地读取大文件.您可以使用该方法并一次处理四行.请注意,不必执行四次读取操作,然后重复执行处理,然后再次执行四次读取操作.您可以从文件中读取几百或几千行的块,然后一次处理四行.完成这些行后,您可以继续阅读文件的内容.

python-从文件中读取数据

python-从文件中读取数据

 一、读取整个文件

learnFile.py

绝对路径

# coding=UTF-8
import sys
reload(sys)
with open(r''C:\Users\zhujiachun\Desktop\test_text.txt'',''r'') as file_object:
        contents = file_object.read()
        print contents

 

learnFile.py所在的目录中查找test_text.txt 并打开

# coding=UTF-8
import sys
reload(sys)
with open(''test_text.txt'') as file_object:
        contents = file_object.read()
        print contents

with open():在不需要访问文件后将其关闭
也可以用open(),close()。但如果程序存在bug,可能导致close()不执行,文件不关闭。
因此推荐用with open()方法

 

结果:

 

 

 

 出现IOError: [Errno 22] invalid mode (''r'') or filename:解决方法:

如果你要是对文件进行写入操作应该这样
f=open(r‘c:\fenxi.txt’,''w'')
如果是只是读取:
f=open(r‘c:\fenxi.txt’,''r'')

 

删除读取文件显示内容末尾空行:

read()到达文件末尾会返回一个空字符串,显示出来就是一个空行

可使用rstrip():

删除空格用strip()

# coding=UTF-8
import sys
reload(sys)
with open(''test_text.txt'') as file_object:
        contents = file_object.read()
        print contents.rstrip()

 

二、逐行读取

使用for循环读取每一行

# coding=UTF-8

with open(''test_text.txt'') as file_object:
       for line in file_object:
           print line.rstrip()

 

储存在列表中读取

# coding=UTF-8

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

 

python:从压缩的文本文件中读取行

python:从压缩的文本文件中读取行

使用python从gz压缩的文本文件中读取一行很容易,而无需完全提取该文件?我有一个大约200mb的text.gz文件。当我提取它时,它变成7.4gb。这不是我必须阅读的唯一文件。对于整个过程,我必须读取10个文件。尽管这将是一个顺序的工作,但我认为在不影响全部信息的情况下做到这一点将是明智之举。我什至不知道有可能。如何使用python完成?我需要逐行阅读文本文件。

答案1

小编典典

您是否尝试过使用gzip.GzipFile?参数类似于open

关于如何从头开始从python文件中读取行python 读取文件某几行的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Python 3读取行内缺少对象的json文件、python – 以4个为一组从HUGE文本文件中读取行、python-从文件中读取数据、python:从压缩的文本文件中读取行等相关知识的信息别忘了在本站进行查找喔。

本文标签: