精华内容
下载资源
问答
  • 然而,该文件是几GB,我非常希望在小块的行中读取它.我想使用numpyloadtxt函数,因为这会将所有内容快速转换为numpy数组.但是,到目前为止,我还无法管理该函数似乎只提供了像这里列选择: data = np.loadtxt("test....

    -1411.85 2.6888 -2.09945 -0.495947 0.835799 0.215353 0.695579

    -1411.72 2.82683 -0.135555 0.928033 -0.196493 -0.183131 -0.865999

    -1412.53 0.379297 -1.00048 -0.654541 -0.0906588 0.401206 0.44239

    -1409.59 -0.0794765 -2.68794 -0.84847 0.931357 -0.31156 0.552622

    -1401.63 -0.0235102 -1.05206 0.065747 -0.106863 -0.177157 -0.549252

    ....

    ....

    然而,该文件是几GB,我非常希望在小块的行中读取它.我想使用numpy的loadtxt函数,因为这会将所有内容快速转换为numpy数组.但是,到目前为止,我还无法管理该函数似乎只提供了像这里的列选择:

    data = np.loadtxt("test.dat", delimiter=' ', skiprows=1, usecols=range(1,7))

    任何想法如何实现这一目标?如果使用loadtxt不可能在Python中提供任何其他选项?

    解决方法:

    如果你可以使用pandas,那会更容易:

    In [2]: import pandas as pd

    In [3]: df = pd.read_table('test.dat', delimiter=' ', skiprows=1, usecols=range(1,7), nrows=3, header=None)

    In [4]: df.values

    Out[4]:

    array([[ 2.82683 , -0.135555 , 0.928033 , -0.196493 , -0.183131 ,

    -0.865999 ],

    [ 0.379297 , -1.00048 , -0.654541 , -0.0906588, 0.401206 ,

    0.44239 ],

    [-0.0794765, -2.68794 , -0.84847 , 0.931357 , -0.31156 ,

    0.552622 ]])

    编辑

    如果你想读每行k行,你可以指定chunksize.例如,

    reader = pd.read_table('test.dat', delimiter=' ', usecols=range(1,7), header=None, chunksize=2)

    for chunk in reader:

    print(chunk.values)

    日期:

    [[ 2.6888 -2.09945 -0.495947 0.835799 0.215353 0.695579]

    [ 2.82683 -0.135555 0.928033 -0.196493 -0.183131 -0.865999]]

    [[ 0.379297 -1.00048 -0.654541 -0.0906588 0.401206 0.44239 ]

    [-0.0794765 -2.68794 -0.84847 0.931357 -0.31156 0.552622 ]]

    [[-0.0235102 -1.05206 0.065747 -0.106863 -0.177157 -0.549252 ]]

    您必须按照自己的意愿处理如何将它们存储在for循环中.请注意,在这种情况下,reader是TextFileReader,而不是DataFrame,因此您可以懒惰地遍历它.

    您可以阅读this了解更多详情.

    标签:python,numpy

    来源: https://codeday.me/bug/20190623/1272805.html

    展开全文
  • 如何用python循环读取下面.txt文件,用红括号标出来数据呢?首先,观察数据可知,不同行个数据元素不一样,所以考虑直接用正则表达式。再加上,对读和写文件操作,就了注:我用是pycharm+python2.7...

    如何用python循环读取下面.txt文件中,用红括号标出来的数据呢?

    20190128161705.jpg

    首先,观察数据可知,不同行的第一个数据元素不一样,所以考虑直接用正则表达式。

    再加上,对读和写文件的操作,就行了

    注:我用的是pycharm+python2.7

    话不多说,直接上代码

    import re

    f1=file('shen.txt','r')

    data1=f1.readlines()

    # print data1

    f1.close()

    results = []

    for line in data1:

    data2=line.split()

    # print data2[0]

    m = re.findall(r"[0-9]:", data2[0])

    if m:

    results.append(line)

    # for i in data2[0]:

    # data3=i.split(":")

    # print data3

    # if data3>=0 and data3<=50000:

    # results.append(line)

    # if i=='1':

    # results.append(line)

    f2=file('deal.txt','w')

    f2.writelines(results)

    f2.close()

    前期,我遇到"1:”这样的字符串实在是没办法处理,后来查找资料,发现有正则这么爽的东西!

    在上面的代码中,需要说明的是:

    m = re.findall(r"[0-9]:", data2[0])

    该语句的意思就是,对于字符串而言,寻找到能够匹配1:,2:,9:。。。。。。的字符串

    最后处理的结果是:

    20190128161718.jpg

    由于数据不是很漂亮,还需要将里面的",”和":”这两个符号去掉,因此,我使用了replace语句

    代码如下:

    #coding:utf-8

    #__author__ ='dell'

    import re

    f1=file('shen.txt','r')

    data1=f1.readlines()

    # print data1

    f1.close()

    results = []

    for line in data1:

    data2=line.split()

    # print data2[0]

    m = re.findall(r"[0-9]:", data2[0])

    if m:

    results.append(line)

    # for i in data2[0]:

    # data3=i.split(":")

    # print data3

    # if data3>=0 and data3<=50000:

    # results.append(line)

    # if i=='1':

    # results.append(line)

    f2=file('deal.txt','w')

    f2.writelines(results)

    f2.close()

    # 替换掉所有的逗号,

    f4=open('deal.txt','r')

    data3=f4.read()

    f4=data3.replace(',',' ')

    f5=file('deal.txt','w')

    f5.write(f4)

    f5.close()

    # 替换掉所有的冒号

    f6=open('deal.txt','r')

    data4=f6.read()

    f6=data4.replace(':',' ')

    f7=file('deal.txt','w')

    f7.write(f6)

    f7.close()

    最终,得到的数据就很漂亮了,如下所示:

    20190128161728.jpg

    以上这篇使用python读取.text文件特定行的数据方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • 可以使用以下方法1、os.mknod(“test.txt”) #创建空文件2、fp = open(“test.txt”,w) #直接打开个文件,如果文件不存在则创建文件3、open 模式处理文件时,个常见需求就是读取文件指定内容,那么该...

    5d843f700e64c277.jpg

    python读取文件的指定行,可以使用以下的方法

    1、os.mknod(“test.txt”) #创建空文件

    2、fp = open(“test.txt”,w) #直接打开一个文件,如果文件不存在则创建文件

    3、open 模式

    处理文件时,一个常见的需求就是读取文件的指定行内容,那么该如何实现的?with open('a.log', 'r') as fp:

    lines = fp.readlines()

    last_line = lines[-1]

    即使不考虑异常处理的问题,这个代码也不完美,因为如果文件很大,lines = fp.readlines()会造成很大的时间和空间开销。

    解决的思路是用将文件指针定位到文件尾,然后从文件尾试探出一行的长度,从而读取最后一行。代码如下:def __get_last_line(self, filename):

    """

    get last line of a file

    :param filename: file name

    :return: last line or None for empty file

    """

    try:

    filesize = os.path.getsize(filename)

    if filesize == 0:

    return None

    else:

    with open(filename, 'rb') as fp: # to use seek from end, must use mode 'rb'

    offset = -8 # initialize offset

    while -offset < filesize: # offset cannot exceed file size

    fp.seek(offset, 2) #read#offset chars from eof(represent by number'2')

    lines = fp.readlines() # read from fp to eof

    if len(lines) >= 2: # if contains at least 2 lines

    return lines[-1] # then last line is totally included

    else:

    offset *= 2 # enlarge offset

    fp.seek(0)

    lines = fp.readlines()

    return lines[-1]

    except FileNotFoundError:

    print(filename + ' not found!')

    return None

    其中有几个注意点:

    1. fp.seek(offset[, where])中where=0,1,2分别表示从文件头,当前指针位置,文件尾偏移,缺省值为0,但是如果要指定where=2,文件打开的方式必须是二进制打开,即使用'rb'模式,

    2. 设置偏移量时注意不要超过文件总的字节数,否则会报OSError,

    3. 注意边界条件的处理,比如文件只有一行的情况。

    更多学习内容,请点击python学习网。

    fp.read([size]) #size为读取的长度,以byte为单位

    fp.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分

    fp.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。

    fp.write(str) #把str写到文件中,write()并不会在str后加上一个换行符

    fp.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。

    fp.close() #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。 如果一个文件在关闭后还对其进行操作会产生ValueError

    fp.flush() #把缓冲区的内容写入硬盘

    fp.fileno() #返回一个长整型的”文件标签“

    fp.isatty() #文件是否是一个终端设备文件(unix系统中的)

    fp.tell() #返回文件操作标记的当前位置,以文件的开头为原点

    fp.next() #返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。

    fp.seek(offset[,whence]) #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

    fp.truncate([size]) #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

    展开全文
  • 楼主大一,Java小白,课程设计遇到的问题,用io流读取txt中的数据,查询时输入身份证号,要求显示出这个身份证号所在的这一行信息,这个要怎么做呢?![图片]...
  • 如果文件路径是以参数形式filepath传递,那么只用一行代码就可以完成我们需求了:count = len(open(filepath,'rU').readlines())如果是非常大文件,上面方法可能很慢,甚至失效.此时,可以使用循环来处理:...

    一、计算文件的行数

    最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的需求了:

    count = len(open(filepath,'rU').readlines())

    如果是非常大的文件,上面的方法可能很慢,甚至失效.此时,可以使用循环来处理:

    count = -1

    for count, line in enumerate(open(thefilepath, 'rU')):

    pass

    count += 1

    另外一种处理大文件比较快的方法是统计文件中换行符的个数' '(或者包含' '的字串,如在windows系统中):

    count = 0

    thefile = open(thefilepath, 'rb')

    while True:

    buffer = thefile.read(8192*1024)

    if not buffer:

    break

    count += buffer.count(' ')

    thefile.close( )

    参数'rb'是必须的,否则在windows系统上,上面的代码会非常慢.

    linecache是专门支持读取大文件,而且支持行式读取的函数库。 linecache预先把文件读入缓存起来,后面如果你访问该文件的话就不再从硬盘读取

    二、读取文件某一行的内容(测试过1G大小的文件,效率还可以)

    import linecache

    count = linecache.getline(filename,linenum)

    三、用linecache读取文件内容(测试过1G大小的文件,效率还可以)

    str = linecache.getlines(filename)

    str为列表形式,每一行为列表中的一个元素

    展开全文
  • C语言 怎么用fgets()读取一个txt文件中的任意行的信息C语言 怎么用fgets()读取一个txt文件中的任意行的信息 比如 szhfias sdf如果使用fgets()读取某个文件,第一次读取的bufsize为5,而文件的第一行有10个字符(算上...
  • 在做task中,需要将TXT文本中的某一项注释修改,但是python对txt文本只有写入和读取两种操作。我采用的方法是:1.读取txt文件,将每一行数据,加入新建立的list中。2.在list中修改数据3.再新建一个txt文件,按行存入...
  • 可以使用以下方法1、os.mknod(“test.txt”) #创建空文件2、fp = open(“test.txt”,w) #直接打开个文件,如果文件不存在则创建文件3、open 模式处理文件时,个常见需求就是读取文件指定内容,那么该...
  • c代码读txt文件的某一行

    千次阅读 2015-11-17 11:48:08
    想在TXT文件中读取任意 或 个 数据 ,比如说 第个 TXT文件 有30数据, 第二个TXT文件 有 50数据,希望能不修改代码直接读取,还有种情况就是 第个文件 有40个数据 每个数据间用空格断开,...
  • 可以使用以下方法1、os.mknod(“test.txt”) #创建空文件2、fp = open(“test.txt”,w) #直接打开个文件,如果文件不存在则创建文件3、open 模式处理文件时,个常见需求就是读取文件指定内容,那么该...
  • 很多人有的时候只需要获取文章中的固定的一行,那么我知道这一行,我需要怎么样去获取呢 可能会有人说读取一行,如果这一行是已什么开头的就读出来, 其实还有一种办法,就是我知道文件的路径。知道我要取...
  • 请问怎么用matlab或者其他汇编语言读取一系列文本(txt格式,命名如001,002,003...)中的某一个标志符号(比如说是一个经纬度:40°44'N,116°33'E,每一个文件都有这个经纬度)之后的一个数据(或者说所在的一行...
  • 另外,如果是要删除某一行的话,以第一列学号为关键字,应该怎么写? ``` #include #include #include #include #include struct Student //定义基本表——Student { long long int Sno; //学生学号 char...
  • javac编译单位其实就是单个...这些java文件没有彼此联系必要,它们可以是隶属不同包、在不同文件夹下(当然建议包路径相同java类文件放在同一文件路径下),javac命令只会一行一行读取其中记录,作为一...
  • 个文件个文件地打开,读取,匹配,把匹配数据放到内存关闭,再打开下个。。。。。 谁有比较好方案吗?比如匹配,是不是用正则表达式方式代替split方式会好点。或者还有其它更好吗? 对于100个文件...
  • * 人脸识别图像PCA降维处理类,该类可加载某一文件夹中的图像,进行PCA降维生成特征矩阵 * @author Administrator * */ class FaceDecetionForTest{ //待训练的数据 private CvMat trainImagesRow; ...
  • // 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值----转换为ascii之后方便计算?---- }//回79 } void showFileData(char ** pArray, int len)//以show为开头的函数,其意义因该为展示...
  • Tinyxml 源代码(VC6 & VS2005)

    热门讨论 2009-08-12 15:57:04
    正常情况下,TinyXML会检测出正确的编码并使用它,然而,通过设置头文件中的TIXML_DEFAULT_ENCODING值,TinyXML可以被强制成总是使用某一种编码。 除非以下情况发生,否则TinyXML会默认使用Legacy模式: 如果文件...
  • MAPGIS地质制图工具

    2013-05-06 16:15:30
    4、在较多文字时候,如果一行写不下,将自动转为版面输出(和上一点说明情况不同)。 操作步骤: 1、 执行菜单“1辅助工具\导入导出功能\ MapGis<-> Excel\Excel->MapGis”,然后鼠标左键点击会把当前Excel中选...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    引用了Splayer中的Sqlite3库,进行了测试。 SrcFirstProg 简单的窗口程序。 SuperGrid - 特别的 listview 控件 网格形式的视图,自绘了CComboBox、CEdit、CSuperGridCtrl实现。 tab 演示了CTabCtrl控件的使用方法...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

怎么读取txt中的某一行