len(open('/path/and/filename').readlines())
>>> import os
>>> os.stat("file").st_size == 0
True
注意:
st_size
是检查文件的大小是否为零来判断文件是否为空,这种方法不适合/proc
文件系统,因为在/proc
和/sys
文件系统中所有文件的大小都是0,则需要通过计算文件内容来判断。
>>> import os
>>> statinfo = os.stat('somefile.txt')
>>> statinfo
(33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732)
>>> statinfo.st_size
926L
python合并文件的方法需要考虑文件大小,略有不同
- 大文件合并
filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
for line in infile:
outfile.write(line)
- 小文件合并
filenames = ['file1.txt', 'file2.txt', ...]
with open('path/to/output/file', 'w') as outfile:
for fname in filenames:
with open(fname) as infile:
outfile.write(infile.read())
偷懒一些的方法是直接使用操作系统命令
glob 是一个通过使用Unix shell来查找符合特定规则的所有路径名字。它是通过使用 os.listdir()
和 fnmatch.fnmatch()
功能来实现,不需要调用子shell。
import glob
print glob.glob("/home/admin/*.txt")
则返回
['/home/adam/file1.txt', '/home/adam/file2.txt', .... ]
参考
os.listdir()
可以获取目录下的文件和子目录
如果只是文件,可以使用 os.path
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(mypath) if is file(join(mypath, f))]
如果使用 os.walk()
则会将访问的每个目录分为两个列表,分别是文件和目录。
from os import walk
f = []
for (dirpath, dirnames, filenames) in walk(mypath):
f.extend(filenames)
break
对于需要分析数据,将数据读取到字典中非常方便索引
d = {}
with open("file.txt") as f:
for line in f:
(key, val) = line.split()
d[int(key)] = val
my_dict = {}
with open("rest.txt", 'r') as f:
for line in f:
items = line.split()
key, values = items[0], items[1:]
my_dict[key] = values
print my_dict
参考 Python - file to dictionary?
参考 How to read file into dictionary in Python specific filetype
想从一个函数返回结果写入到文件
def outputVCPUTop():
kvm0_vcpu_top=updateVCPU("/proc/kvm0/vcpu_top")
kvm1_vcpu_top=updateVCPU("/proc/kvm1/vcpu_top")
foutput = open(g_vcpu_top,'w')
foutput.write(kvm0_vcpu_top)
foutput.write(kvm1_vcpu_top)
foutput.close()
提示报错
...
TypeError: expected a character buffer object
改进