我最近创建了一个Twitter-bot,它接受一个指定的.txt文件并逐行发布。我在程序中构建的许多功能可以解决一些格式化问题,这实际上允许程序使用几乎任何文本文件。
我想构建一个功能,我可以“导入”.txt文件以供使用。
我把它放在引号中,因为程序会在命令行中运行。
我认为有两种方法可以解决这个问题但需要一些指导:
A)我开始提示程序,询问用户想要使用哪个文件。它存储为一个字符串(比如变量字符串),代码如下所示 -
file = open(string,'r')
有两个主要问题。第一个是我不确定如果指定的程序拼写错误或不存在,如何防止程序崩溃。第二个是它不会与未来的发展相关(最终我想围绕这个程序构建应用程序功能)
B)以某种方式在命令行中以某种方式指定所需的文件。虽然程序仍会偶尔崩溃,但对用户来说并不那么不方便。此外,这将适合未来的开发,因为通过命令行传递值比通过内部提示更容易。
有什么想法吗?
答案 0 :(得分:0)
关于A),您可能想要调查
try:
with open(fname) as f:
blah = f.read()
except Exception as ex:
# handle error
和B)你可以,例如
import sys
fname = sys.argv[1]
您还可以将两者结合起来以确保用户已传递参数:
#!/usr/bin/env python
# encoding: utf-8
import sys
def tweet_me(text):
# your bot goes here
print text
if __name__ == '__main__':
try:
fname = sys.argv[1]
with open(fname) as f:
blah = f.read()
tweet_me(blah)
except Exception as ex:
print ex
print "Please call this as %s <name-of-textfile>" % sys.argv[0]
以防有人想知道# encoding: utf-8
行。这允许源代码包含utf-8
个字符。否则只允许ASCII,这对于这个脚本是可以的。所以这条线是没有必要的。但是,我正在测试脚本本身(python x.py x.py
),并且作为一个小测试添加了utf-8
评论(# ä
)。在现实生活中,你需要更多地关注输入的字符编码...
Exception
不被视为良好的编码风格。虽然Python鼓励假设它是最好的try
,但是在它们发生的地方捕获可预期的错误可能是明智的。例如,访问不存在的文件将引发IOError
。你可能会得到类似的东西:
except IndexError as ex:
print "Syntax: %s <text-file>" % sys.argv[0]
except IOError as ex:
print "Please provide an existing (and accessible) text-file."
except Exception as ex:
print "uncaught Exception:", type(ex)
答案 1 :(得分:0)
对于问题的第一部分,异常处理是要走的路。虽然对于第二部分,您也可以使用名为argparse的模块。
import argparse
# creating command line argument with the name file_name
parser = argparse.ArgumentParser()
parser.add_argument("file_name", help="Enter file name")
args = parser.parse_args()
# reading the file
with open(args.file_name,'r') as f:
file = f.read()
您可以在其文档页面上阅读有关argparse模块的更多信息。