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