在Ruby中,您可以使用文件读取s = File.read(filename).我在Python中知道的最短和最清晰的是
with open(filename) as f:
s = f.read()
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以使它更短(最好是一行),更具可读性?
注意:最初我把这个问题称为"在一行代码中执行此操作".正如S.Lott所指出的,更短的并不意味着更具可读性.所以我只是为了弄清楚我的意思而改写了我的问题.我认为Ruby代码更好,更可读,不一定是因为它是一行而不是两行(虽然这也很重要),但也因为它是一个类方法而不是实例方法,这对于谁关闭文件毫无疑问,即使引发异常,如何确保它被关闭等.如下面的答案中所指出的,你可以依靠GC来关闭你的文件(从而使它成为一个单行),但这会使代码变得更糟虽然它更短.不仅是不可移植,而是使其不清楚.
Mar*_*nen 125
with open('x.py') as f: s = f.read()
Run Code Online (Sandbox Code Playgroud)
******笑着
pyf*_*unc 38
这与上面相同,但不处理错误:
s = open(filename, 'r').read()
Run Code Online (Sandbox Code Playgroud)
Eya*_*vin 20
使用pathlib.
Python 3.5及以上版本:
from pathlib import Path
contents = Path(file_path).read_text()
Run Code Online (Sandbox Code Playgroud)
对于较低版本的Python,请使用pathlib2:
$ pip install pathlib2
Run Code Online (Sandbox Code Playgroud)
然后
from pathlib2 import Path
contents = Path(file_path).read_text()
Run Code Online (Sandbox Code Playgroud)
写作也很简单:
Path(file_path).write_text('my text')
Run Code Online (Sandbox Code Playgroud)
ars*_*ars 18
contents = open(filename).read()
Run Code Online (Sandbox Code Playgroud)
sna*_*hoe 10
如果您愿意使用库,请尝试安装forked-path(使用easy_install或pip).
然后你可以这样做:
from path import path
s = path(filename).bytes()
Run Code Online (Sandbox Code Playgroud)
这个库是相当新的,但它是一个库的一个分支,已经在Python中浮动了很多年并且已经使用了很多.自从我多年前找到这个库以来,我很少使用os.path或者open()更多.
这不是Perl; 您不希望将多行代码强制拟合到一行上.编写一个函数,然后调用该函数需要一行代码.
def read_file(fn):
"""
>>> import os
>>> fn = "/tmp/testfile.%i" % os.getpid()
>>> open(fn, "w+").write("testing")
>>> read_file(fn)
'testing'
>>> os.unlink(fn)
>>> read_file("/nonexistant")
Traceback (most recent call last):
...
IOError: [Errno 2] No such file or directory: '/nonexistant'
"""
with open(fn) as f:
return f.read()
if __name__ == "__main__":
import doctest
doctest.testmod()
Run Code Online (Sandbox Code Playgroud)
缓慢,丑陋,特定于平台...但是单线;-)
import subprocess
contents = subprocess.Popen('cat %s' % filename, shell = True, stdout = subprocess.PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)
就这么简单:
f=open('myfile.txt')
s=f.read()
f.close()
Run Code Online (Sandbox Code Playgroud)
对内容“s”做任何你想做的事
| 归档时间: |
|
| 查看次数: |
101344 次 |
| 最近记录: |