Python字符串查询

时间:2016-02-21 02:14:03

标签: python twitter bots

我最近创建了一个Twitter-bot,它接受一个指定的.txt文件并逐行发布。我在程序中构建的许多功能可以解决一些格式化问题,这实际上允许程序使用几乎任何文本文件。

我想构建一个功能,我可以“导入”.txt文件以供使用。

我把它放在引号中,因为程序会在命令行中运行。

我认为有两种方法可以解决这个问题但需要一些指导:

A)我开始提示程序,询问用户想要使用哪个文件。它存储为一个字符串(比如变量字符串),代码如下所示 -

file = open(string,'r')

有两个主要问题。第一个是我不确定如果指定的程序拼写错误或不存在,如何防止程序崩溃。第二个是它不会与未来的发展相关(最终我想围绕这个程序构建应用程序功能)

B)以某种方式在命令行中以某种方式指定所需的文件。虽然程序仍会偶尔崩溃,但对用户来说并不那么不方便。此外,这将适合未来的开发,因为通过命令行传递值比通过内部提示更容易。

有什么想法吗?

2 个答案:

答案 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模块的更多信息。