Python read()不读取文件

时间:2018-09-06 09:04:02

标签: python python-3.x file

因此,我用Python创建了一个简单的脚本,该脚本以文件名作为命令行参数,并在执行脚本时读取给定的文件。很简单,每当我执行脚本时,它都不会在文件内打印文本,也不会出现错误。我对编程非常陌生,并且在这段代码中已经花了好几个小时了。

import sys

def openfile(filename):
    f = open(filename, mode='r')
    f.read()
    f.close()

if __name__ == '__main__':
        openfile(filename = sys.argv[1])
        print('script has been executed')

快速免责声明,我知道几年前有人发布了类似的问题,但是他没有直接回答为什么他的代码不起作用,我也没有得到我正在寻找的信息找出答案。 也为我的英语不好对不起。我尽力保持清楚,但英语不是我的母语。

5 个答案:

答案 0 :(得分:5)

您正在读取文件f.read(),但需要将内容分配给变量或打印它或其他内容。 Python不会仅仅因为读取文件就打印每个读取文件的内容:您必须告诉它如何处理结果。

答案 1 :(得分:3)

对于python新手来说,必须学习Python anti-patterns。这样可以避免许多错误和错误。 OP显然具有其他编程语言的丰富经验,但没有意识到使用python更好的工作方式。

如果您研究反模式,您将发现with open()是打开文件的更好方法。立即,您会发现f是一个文件处理程序,除非您将数据从f.read()函数传递到另一个变量,否则它将不存储任何数据。

def openfile(filename):
    with open(filename) as f:
        data = f.read()
    # to print out the contents
    print(data)

可以使用sys.argv,但是强烈建议使用argparse

答案 2 :(得分:1)

似乎该程序只是读取传递到命令行参数的文件。该程序会运行并读取文件,但是您需要一行代码来告诉python打印您正在读取的文件的内容。试试这个:

import sys

def openfile(filename):
    f = open(filename, mode='r')
    contents = f.read()
    print(contents)
    f.close()

if __name__ == '__main__':
    openfile(filename=sys.argv[1])
    print('script has been executed')

答案 3 :(得分:0)

您正在读取文件,但是必须将内容分配给某个变量,或者只打印内容。

例如:

{var cy = window.cy = cytoscape({ container: document.getElementById('cy'), boxSelectionEnabled: false, autounselectify: true, layout: { name: 'dagre' }, style:[{selector:'node',css:{'content':'data(id)','text-valign':'center','text-halign':'center','shape':'rectangle'}},{selector:'$node > node',css:{'padding-top':'10px','padding-left':'10px','padding-bottom':'10px','padding-right':'10px','text-valign':'top','text-halign':'center','background-color':'#bbb'}},{selector:'edge',css:{'target-arrow-shape':'triangle'}},{selector:':selected',css:{'background-color':'black','line-color':'black','target-arrow-color':'black','source-arrow-color':'black'}}], elements:{nodes:[{data:{id:'items-a',name:'items-a'}},{data:{id:'a-1',name:'a-1',parent:'items-a'}},{data:{id:'a-2',name:'a-2',parent:'items-a'}},{data:{id:'items-b',name:'items-b'}},{data:{id:'b-1',name:'b-1',parent:'items-b'}},{data:{id:'b-2',name:'b-2',parent:'items-b'}},{data:{id:'items-c',name:'items-c'}},{data:{id:'c-1',name:'c-1',parent:'items-c'}},{data:{id:'c-2',name:'c-2',parent:'items-c'}}],edges:[{'data':{'source':'items-a','target':'items-b'}},{'data':{'source':'items-b','target':'items-c'}}]}, ready: function () { //. // cy = this; // sort child nodes with grid layout using 1 column /* var parentNodes = cy.nodes(':parent'); parentNodes.descendants().layout({ name: 'grid', cols: 1 }).run(); */ // // } }); 在这里f = open("SampleTextFile_100kb.txt", "rt")用于阅读,r用于文本文件

t#读取并打印完整文件。

print(f.read())#最多读取指定的字符数限制。

将行/文件或整个文件读为行:

print(f.read(55))

以行的形式读取整个文件

print(f.readline()) #TO READ MULTIPLE LINES print(f.readline()) print(f.readline())

希望这会有所帮助。

答案 4 :(得分:0)

我强烈建议上下文管理器使用@mootmoot的方法。这不仅易于读取,而且由于某种原因而无法读取文件时,也会捕获异常。如果您不想使用上下文管理器,建议您使用try-except命令来实现功能。如果按照@Adam Merki的建议进行操作,这是不安全的,因为如果读取文件时发生异常,将无法保证文件将被关闭。

使用try-except语句,您的函数可能如下所示:

import sys

def openfile(filename):

    f = open(filename, mode='r')
    try:
        print(f.read())

    except:
        print('something went wrong')

    else:
        print('nothing went wrong')

    finally:
        f.close()


if __name__ == '__main__':
    openfile(filename=sys.argv[1])
    print('script has been executed')