传递文件路径,文件名或文件对象的Python约定

时间:2012-08-29 19:24:30

标签: python

我经常看到接受各种输入的Python代码......

文件名

s = Something("/Users/me/my_file.txt")

文件路径

s = Something("my_file.txt")

或文件对象

f = open("my_file.txt", "r")
s = Something(f)

这是否有惯例? 正如很多人提到的,这取决于something()是什么。什么情况更适合文件名与文件对象?

我想知道this SO帖子是否给出了最佳答案。

3 个答案:

答案 0 :(得分:3)

json有两种加载数据的方法:json.load采用类文件对象,json.loads采用字符串:

>>> json.load(open("my_file.json"))
[1, 2]
>>> json.loads("[1, 2]")
[1, 2]

pickle模块有一个类似的接口(一个接受一个文件对象,另一个接受一个字符串)

基本上,您的API主要使用文件对象,并且您提供了一个方便的方法,它将提供的字符串包装在StringIO object中。可能看起来像这样:

class Parser(object):
    def __init__(self, fh):
        # Can do things like:
        first_line = fh.readline()
        fh.seek(0)
        all_content = fh.read()


def parse(fh):
    return Parser(fh)


def parse_str(inputstring):
    fh = StringIO.StringIO(inputstring)
    return Parser(fh)

答案 1 :(得分:2)

这一切都取决于Something()的界面。我不知道是否公平地说这有一个严格的约定。关于duck typing的好处是你不需要知道函数的参数类型,只需要知道参数的某些行为。

答案 2 :(得分:0)

它认为没有任何适用的惯例。这完全取决于你的计划想要实现的目标。