我经常看到接受各种输入的 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帖子给出了最佳答案。
最佳答案
json
有两种加载数据的方法:json.load
接受类文件对象,json.loads
接受字符串:
>>> json.load(open("my_file.json"))
[1, 2]
>>> json.loads("[1, 2]")
[1, 2]
pickle
模块有一个相似的接口(interface)(一个接受一个文件对象,第二个接受一个字符串)
本质上,您的 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)
关于传入文件路径、文件名或文件对象的 Python 约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12185103/