• 今天做《python for information》习题11.2Write a program to look for lines of the form New Revision: 39772 And extract the number from each of the lines using a regular expression and the findall()...
今天做《python for information》中习题11.2Write a program to look for lines of the form

New Revision: 39772

And extract the number from each of the lines using a regular expression and the findall() method. Compute the average of the numbers and print out the average.

Enter file:mbox.txt
38549.7949721

Enter file:mbox-short.txt
39756.9259259
初步完成的结果是

import re
numlist = list()

#open the file
fhand = open('mbox-short.txt')

for line in fhand:
x = re.findall('^New Revision: ([0-9]+)',line)
if x != []:
num = int(x[0])
numlist.append(num)

print sum(numlist)/float(len(numlist))
但是感觉按行读取不太爽，re.findall明明可以直接返回全部结果的列表的于是就想直接全文截取需要的数字。

import re
numlist = list()

#open the file
fhand = open('mbox-short.txt')

for line in fhand:
x = re.findall('^New Revision: ([0-9]+)',line)
if x != []:
num = int(x[0])
numlist.append(num)

print sum(numlist)/float(len(numlist))

numlist = []
list = re.findall('.*New Revision: ([0-9]+)',inp)
for i in list:
numlist.append(int(i))

print sum(numlist)/float(len(numlist))
然而运行结果却出乎意料的没有获得需要的数字，print测试得到的是一个空列表。为什么这里就无法截取了呢？后来问了YF同学，他发现的应当在下面再打开一次文件fhand可能在上一个循环中被破坏了，可能像C中的指针。

import re
numlist = list()

#open the file
fhand = open('mbox-short.txt')

for line in fhand:
x = re.findall('^New Revision: ([0-9]+)',line)
if x != []:
num = int(x[0])
numlist.append(num)

print sum(numlist)/float(len(numlist))

numlist = []
fhand = open('mbox-short.txt')
list = re.findall('.*New Revision: ([0-9]+)',inp)
for i in list:
numlist.append(int(i))

print sum(numlist)/float(len(numlist))

测试结果正常。

但是为什么fhand会被破坏？他说像是指针，不过type（fhand）的得到的是“file”类型。莫非file类型想指针是指向一个文件的内存地址，随着文件的读取指针指向会改变于是一个循环下来fhand就被破坏了？不得而知。留待以后解答吧。


展开全文
• 首先，看下file有哪些方法，比较常用用红色标标注出来。 f = codecs.open('3.txt', 'wb') print(dir(f)) ['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__...
首先，看下file有哪些方法，比较常用的用红色标标注出来。

f = codecs.open('3.txt', 'wb')
print(dir(f))
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close',
'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode',
'name', 'newlines',
'tell', 'truncate',

1、flush() 方法是用来刷新缓冲区的，即将缓冲区中的数据立刻写入文件，同时清空缓冲区，不需要是被动的等待输出缓冲区写入。一般情况下，文件关闭后会自动刷新缓冲区，但有时你需要在关闭前刷新它，这时就可以使用
flush() 方法。

file = open('4.txt','wb')
file.write('abc')
file.flush()
file.close()

2、name，返回文件的名称。

file = open('4.txt','wb')
file.write('abc')
file.flush()
file.close()
print '文件名为： ',file.name

3、write，writelines
，

write()方法可以将任何字符串写入一个打开的文件。该方法不会在字符串的结尾添加换行符（“\n”）

writelines()作用： 用于向文件中写入一序列的字符串。这一序列字符串可以是迭代对象产生的，如字符串列表。换行需制定换行符\n

file = codecs.open('4.txt','wb')
file.write('aaaa\n')
file.writelines(['1111\n','2222\n','3333\n','4444\n'])
file.close()
aaaa
1111
2222
3333
4444

file = codecs.open('4.txt','rb')
file.close()
['aaaa\n', '1111\n', '2222\n', '3333\n', '4444\n']

"\n" 字符。

file = codecs.open('4.txt','rb')
file.close()
aaaa

next()，作用：读取文件的下一行内容，返回一个字符串。

file = codecs.open('4.txt','rb')
print (file.next())
print (file.next())
file.close()
aaaa
1111
2222

4、tell() 方法返回文件的当前位置，即文件指针当前位置。

file = codecs.open('4.txt','rb')
print (file.tell())
file.close()
['aaaa\n', '1111\n', '2222\n', '3333\n', '4444\n']
25

5、file的with用法

http://python.jobbole.com/82494/
这篇文章写的很棒。

with codecs.open('4.txt','rb')  as file:
['aaaa\n', '1111\n', '2222\n', '3333\n', '4444\n']

with codecs.open('4.txt','rb')  as file:
与

file = codecs.open('4.txt','rb')
表述的意思是一样的，只是with不需要在结尾close（）


展开全文
• Python 官方文档...关于file.flush() 说明写道：“ flush() does not necessarily write the file’s data to disk. Use flush() followed by
在Python 官方文档https://docs.python.org/2/library/stdtypes.html?highlight=file%20flush#file.flush 关于file.flush() 的说明中写道：“ flush() does not necessarily write the file’s data to disk. Use flush() followed by os.fsync() to ensure this behavior.”flush方法并不强制把数据写入到磁盘文件中，那么flush方法为什么会这样呢？
其实这里有两种层面的buffering：
1. Internal buffers
2. Operating system buffers
Internal buffers 创建在 runtime/library/language 中避免每次写操作都调用系统call，依次来加速运行。当需要把数据写入文件时，先写入internal buffer, 当internal buffer 溢满时，再调用系统call写入到文件中。
所以为了确保数据写入到了文件中，file.flush() 之后要调用os.fsync()。

Example

#!/usr/bin/python

import os, sys

# Open a file
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )

# Write one string
os.write(fd, "This is test")

# Now you can use fsync() method.
# Infact here you would not be able to see its effect.
os.fsync(fd)

# Now read this file from the beginning
os.lseek(fd, 0, 0)
print "Read String is : ", str

# Close opened file
os.close( fd )

print "Closed the file successfully!!"

Reference: http://stackoverflow.com/questions/7127075/ http://www.tutorialspoint.com/python/os_fsync.htm
展开全文
• 在处理日志文件时候，常常会遇到这样情况：日志文件巨大，不可能一次性把整个文件...在 Python ，内置 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样事情。以下面代码为例：file = open
在处理日志文件的时候，常常会遇到这样的情况：日志文件巨大，不可能一次性把整个文件读入到内存中进行处理，例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件，我们可能希望每次只处理其中 200MB 的内容。在 Python 中，内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例：

file = open('test.log', 'r')sizehint = 209715200   # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0:    position = file.tell()    lines = file.readlines(sizehint)

每次调用 readlines(sizehint) 函数，会返回大约 200MB 的数据，而且所返回的必然都是完整的行数据，大多数情况下，返回的数据的字节数会稍微比 sizehint 指定的值大一点（除最后一次调用 readlines(sizehint) 函数的时候）。通常情况下，Python 会自动将用户指定的 sizehint 的值调整成内部缓存大小的整数倍。
展开全文
• class io.FileIO(name, mode=’r’, closefd=True, opener=None)...  FileIO中的参数nane可以是以下两种的任一种：   （1）一个字符串或者字节对象，表示将要打开的文件的路径。在这种情况下，closefd参数必须得是
• Python编程语言可以使用os.path.isdir()函数判断某一路径是否为目录。其函数原型如下所示。 os.path.isdir(path) 参数含义如下。path：要进行判断路径。以下实例判断E:\MJlife\test是否为目录。 >>...
• Python open() 方法用于打开一个文件，并返回文件对象，在对文件进行处理过程都需要使用到这个函数，如果该文件无法被打开，会抛出 OSError。(使用 open() 方法一定要保证关闭文件对象，即调用 close() 方法) open...
• python .npy file的读写1.读写.npy文件 1.读写.npy文件 .npy文件是numpy专用二进制文件 import numpy as np arr=np.array([[1,2,3],[4,5,6]]) np.save("weight.npy",arr) #将数据arr保存到weight.npy文件 load...
• import pefile,sys,os,string,shutil,re pe_path = sys.argv[1] pe = pefile.PE(pe_path) print pe_path print pe ` 可是print pe总是报错 如图![图片说明]...
• from file import *：可以直接使用file中的函数 import file：使用file中函数需要以file.函数的形式 temp.py为a.py同目录下文件，内容为： def cal(n): n=n+1 return n a.py文件内容为： from temp import * ...
• 如新建了一个文本文档test.txt ...然后在python中输入 >>>file = open ("test.txt", "r") >>>print file.seek(0) #file.seek(0)是重新定位在文件第0位及开始位置  显示是None #seek函数不返回值，因此print
• fileObject.seek(offset[, whence]) 参数 offset----偏移量（相对于文件某个位置偏移字节数） whence----offset辅助（可选，默认值为 0） 0：从文件头开始 1：从文件当前位置开始 2：从文件尾开始 返回值...
• 解决问题；每次创建.py文件都要重复性输入： #!/usr/bin/env python3 # -*- coding: utf-8 -*- 等内容。...设置方法：Settings-->Editor-->Code Style-->File and Code Templates-->python script
• 下面问题是我在学习Python打开文件时候遇到一个问题，如果刚好对应了你问题，那是最好，如果不适合，起码可以帮助排除一种可能吧。 原程序： 报错：FileNotFoundError: [Errno 2] No such file or ...
• 如果文件打开方式是'w'，且最后没有写file....从python2.5开始，你可以避免显式地使用file.close()函数，如果采用with语句话。如下所示： import os os.chdir("d:\\") with open("temp.txt") as f: for line in f:
• 在运行代码过程遇到这个错误，我把代码复制到C:\python27，目录下可以执行，说明文件没有问题，应该是目录，或者打开路径不对，需要使用cd 命令切换工作目录到python文件所在目录，再执行，就可以了。...
• file.seek是将文件游标移动到文件任意位置，然后对文件当前位置进行操作（增加、删除内容等）
• open和file都是用来对文件操作 open：内置函数，使用方式是open('file_name', mode, buffering)，返回值是一个file对象，以写模式打开文件如果不存在会被创建一个新file:是一个类，使用file('file_name...
• Python Dict and Filepython字典与文件读写标签（空格分隔）： PythonDict Hash TablePython的哈希表结构叫做字典。基本形式为key:value键值对集合，被大括号包围。string数字和turple都可以作为key，任何...
• 发现python中提供with open as 这个还是用不错！好，废话不多说了，看下例子： with open('./sigir_title_cizu.txt') as cizu, open('sigir_title.txt') as titles: cizuData = cizu.readlines() title
• Python用open()返回一个文件，最常用open函数是open(filename , mode) 其中，mode包括有"w"(write)， “r”(read) ， “a”(open the file for appending)， 当然也可以用“wt”表示写入text，“rt”表示读取text...
• 系统没有python.h原因，是因为没有安装python的开发版，即Python-devel这个包，命令提示符下执行 yum install python-devel
• 查看模块所在文件路径 模块名.__ file __ 例： import random print(random.__file__)
• 关于python中的 “ FileNotFoundError: [Errno 2] No such file or directory: '……'问题 ” 使用python打开文件时出现的问题：发现最终还是路径不正确 答案在此
• FileOutputStream类用来创建一个文件（如果文件不存在）并向文件写入数据，而文件存在情况下直接向该文件写入数据。  //out流 //打开hello world.txt文件,准备存储内容 FileOutputStream fout = new ...

...

python 订阅