为了账号安全,请及时绑定邮箱和手机立即绑定

Python不从文件读取

Python不从文件读取

哆啦的时光机 2021-04-12 16:14:58
我试图遍历可验证为非空的文本文件的行,并且我的脚本遇到问题。在尝试调试编写的内容时,我认为可以确保脚本正确地从文件中读取,因此我目前正在尝试打印其中的每一行。最初,我尝试使用Python中的常规方法,即:with open('file.txt') as fo:    for line in fo:         print line但我的脚本没有打印任何内容。然后,我尝试将所有行存储在列表中,如下所示:with open('file.txt') as fo:    flines = fo.readlines()print flines但是我的程序仍然输出一个空列表(即[])。我还尝试fo.seek(0)在尝试读取文件指针之前确保我的文件指针指向该文件的开头,但这仍然行不通。我已经花了一些时间阅读这里发布的类似问题的解决方案,但是到目前为止,我没有尝试过。我不知道这种基本的I / O操作如何给我带来很多麻烦,但是我必须缺少一些基本知识,因此,我将非常感谢任何帮助/建议。编辑:这是导致问题的我的脚本的一部分:import subprocess as sbpwith open('conf_15000.xyz','w') as fo:    p1 =sbp.Popen(['head','-n', '300000','nnp-pos-1.xyz'],stdout=sbp.PIPE)    p2 = sbp.Popen(['tail','-n', '198'],stdin=p1.stdout,stdout=fo)with open('conf_15000.xyz','r') as fp:    fp.seek(0)    flines = fp.readlines()print flines这是该nnp-pos-1.xyz文件的摘录(所有行都具有相同的格式,总共有370642个): Ti        32.9136715924       28.5387609200       24.6554922872  O        39.9997000300       35.1489480846       22.8396092714  O        33.7314699265       30.3398473499       23.8866085372 Ti        27.7756767925       31.3455930970       25.9779887743  O        31.1520937719       29.0752315770       25.4786577758  O        26.1870965535       32.4876155555       26.3346205619 Ti        38.4478275543       25.5734609650       22.0654953429  O        24.1328940232       31.3858060129       28.8575469919  O        38.6506317714       27.3779871011       22.6552032123 Ti        40.5617501289       27.5095900385       22.8436684314  O        38.2400600469       29.1828342919       20.7853056680  O        38.8481088254       27.2704154737       26.9590081202运行脚本时,从(conf_15000.xyz)读取的文件已正确写入,但是我似乎无法在运行时从中读取文件。EDIT-2:按照sudonym的建议,我正在使用绝对文件路径,并在我在上一次编辑中编写的两个语句之间添加以下不缩进的行,从而在读取文件之前检查文件是否为空with:print os.path.isfile(r'full/path/to/file')print (os.stat(r'full/path/to/file').st_size != 0)第一个布尔值的计算结果为True(意味着文件存在),而第二个布尔值的计算结果为(意味着False文件为空)。这很奇怪,因为这两行都是在我关闭fo写入文件的文件指针之后添加的,并且还因为fp执行脚本后被写入(随后从中读取)的文件不为空(实际上,它是包含所有应该包含的行)。
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您可能需要flush()os.fsync()写入缓冲区(也许也要调用)-在写入之后和读取之前。

参见file.flush()这篇文章


查看完整回答
反对 回复 2021-04-20
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

首先,包括绝对路径。其次,检查文件是否实际存在并且不为空:


import os


FILEPATH = r'path\to\file.txt' # full path as raw string

if os.path.isfile(FILEPATH) and (os.stat(FILEPATH).st_size != 0): 

   with open(FILEPATH) as fo:

        flines = fo.readlines()

        print flines

else:

    print FILEPATH, "doesn't exist or is empty"


查看完整回答
反对 回复 2021-04-20
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号