当前位置:首页 » 硬盘大全 » python将数据写入缓存
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

python将数据写入缓存

发布时间: 2022-04-19 15:29:24

① 一道Python的题目:实现一个简易的写缓存机制。要怎么写是哪方面的知识要去看什么内容

#-*-coding:utf-8-*-

__author__='lpe234'
__date__='2015-04-30'


classMemCache(object):

def__init__(self,limit=3):
self.limit=limit
self.store=[]

defput(self,param=None):
self.store.append(param)
iflen(self.store)>=self.limit:
self._write_db(self.store[:self.limit])
self.store=self.store[self.limit:]

def_write_db(self,param=None):
print'writetodb{0}'.format(param)

if__name__=='__main__':
mem=MemCache(limit=7)
user_input=range(20)
forxinuser_input:
mem.put(x)
C:Python27python.exeD:/00/gui/tmp.py
writetodb[0,1,2,3,4,5,6]
writetodb[7,8,9,10,11,12,13]

Processfinishedwithexitcode0

② 求教python的Dataframe写入Redis的方法

redis的应用场景是为了做缓存的,或者分布式系统共享交换数据。
Pandas的DataFrame是为了做统计方便的一种内存中使用的数据结构。
你要向Redis里存储数据为毛不直接用redis的list不就行了。

③ python保存文件

#1.打开文件open函数
open(file,[option])
#file是要打开的文件
#option是可选择的参数,常见有modeencoding

#2.文件的打开模式
r只读模式,文件不存在时会报错。
w写入模式,文件存在会清空之前的内容,文件不存在则会新建文件。
x写入模式,文件存在会报错,文件不存在则会新建文件。
a追加写入模式,不清空之前的文件,直接将写入的内容添加到后面。
b以二进制模式读写文件,wb,rb,ab。
+可读写模式,r+,w+,x+,a+,这几种模式还遵循了r,w,x,a的基本原则。

#3.文件的读取
f.read(size)#读取文件的内容,将文件的内容以字符串形式返回。
'''size是可选的数值,指定字符串长度,如果没有指定size或者指定为负数,就会读取并返回整个文件。当文件大小为当前机器内存两倍时就会产生问题,反之就尽可能大的size读取和返回数据,如果到了文件末尾,会返回空字符串。
'''

f.readline()#从文件中读取单独一行。
'''字符串结尾会自动加上一个换行符 ,只有当文件最后没有以换行符结尾时,这一操作才会被忽略,这样返回值就不会有混淆。如果返回空字符串,表示到达率文件末尾,如果是空行,就会描述为 ,一个只有换行符的字符串。
'''

f.readlines()#一次读取所有,返回一个列表,列表的元素为文件行的内容。
'''可以通过列表索引的方式将文件的每一行的内容输出。
可以通过for循环迭代输出每一行的信息。
'''

#4.文件的写入
f.write() #将要写入的内容以字符串的形式通过write方法写入文件中。
f.writelines()#括号里必须是由字符串元素组成的序列。

#5.保存和关闭
f.flush()
#在读写模式下,当写完的数据想要读取出来时,要先缓存区的内容保存到文件当中。

f.close()
#关闭文件。对一个已经关闭的文件进行操作会报错。

#6.光标位置
f.tell() #返回光标在文件中的位置。
f.seek(offset,from)
#在文件中移动文件指针,从from(0代表起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节。

#7.查看文件信息
closed #查看文件是否已经关闭,返回布尔值。
mode #返回文件打开模式。
name #返回文件名。

#8.with形式打开文件,里面的语句执行完后会自动关闭文件
withopen('文件名')asf:
f.read()

④ python 写入excel 遇到缓冲区问题 程序要循环很多次,每次都要读取不同的数据有多也

google搜下吧,python操作excel的模块应该有很多的,你的文件结构还是很清晰的,写个简单parser应该不难。如果你经常要处理这类文本的话,推荐用心写个parser,不要用正则。

你的文件结构差不多是这样,2个等于号行之间是整个序列信息的汇总。
之后----号那行之间是可以扔掉的注释,之后有个n个(optional?)section(section起始于某个有:的行,到下个:行之间终止,都是序列各个元件的成分),我没有py里写parser的经验,不过如果你用parsec的话(这个原生haskell模组有各种语言的binding或类似模组),我恰巧几天前写过一个parsec使用小例子,你如果准备用类似模组,

⑤ python 文件读取的问题

首先,"失败实验2"是能够成功的。为什么你失败了呢?我用的2.5。
也就是说,创建后,用close()将数据写入,再使用同样的变量名读取是完全没有问题的。(因为已经重新定义了嘛!)

失败的实验1中,

f.write('ase') 后数据并没有被写入,在缓存区中。
然后f.read(),我个人理解为连缓存中的其他数据也读取了,或者破坏了缓存中的内容。可以看到,开头是要写入的内容‘asd’,后面是无意义的数据。

f.close()时,写入的已经是被修改后的缓存区内容了……也就是asd再加上一大串NULL等……

这个例子告诉我们……用W+时还没close前不要读取……哈哈。
恩~恩~

⑥ python小白提问

"""如果文件存在则写入文件,如果文件不存在则创建这个新文件。
打开文件时,可指定模式 open(filename, 'w'):
'r':读取模式(只读模式)
'w':写入模式(写入文件,每次运行都会覆盖原来文件)
'a':附加模式(在文件原有的基础上,添加新内容)
'r+':能够读取和写入文件的模式
如果你省略了模式实参,Python将以默认的只读模式打开文件。 如果你写入的文件不存在,函数open()将自动创建它。然而,以写入'w'模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。
Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str()将其转换为字符串格式。"""
filename = 'programming.txt'
#写入文件,每次运行都会覆盖原来文件
with open(filename, 'w') as file_object:
file_object.write("I love programming.\n")
file_object.write("I love cteating new games.\n")

#在文件原有的基础上,添加新内容
with open(filename, 'a') as file_object:
file_object.write("I also love finding meaning in large datasets.\n")
file_object.write("I love creating apps that can run in a browser.\n")

#打开文件filename
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())

⑦ 程序开发中已缓存的字节码归失效吗

对于检查型基于哈希的 .pyc 文件,Python 会通过求哈希源文件并将结果哈希值与缓存文件中的哈希值比对来确定缓存有效性。 如果检查型基于哈希的缓存文件被确定为失效,Python 会重新生成并写入一个新的检查型基于哈希的缓存文件。 对于非检查型 .pyc 文件,只要其存在 Python 就会直接认定缓存文件有效。
在 程序开发中从 .pyc 文件加载已缓存字节码之前,它会检查缓存是否由最新的 .py 源文件所生成。 默认情况下,Python 通过在所写入缓存文件中保存源文件的最新修改时间戳和大小来实现这一点。 在运行时,导入系统会通过比对缓存文件中保存的元数据和源文件的元数据确定该缓存的有效性。

Python 也支持“基于哈希的”缓存文件,即保存源文件内容的哈希值而不是其元数据。 存在两种基于哈希的 .pyc 文件:检查型和非检查型。 对于检查型基于哈希的 .pyc 文件,Python 会通过求哈希源文件并将结果哈希值与缓存文件中的哈希值比对来确定缓存有效性。 如果检查型基于哈希的缓存文件被确定为失效,Python 会重新生成并写入一个新的检查型基于哈希的缓存文件。 对于非检查型 .pyc 文件,只要其存在 Python 就会直接认定缓存文件有效。 确定基于哈希的 .pyc 文件有效性的行为可通过 --check-hash-based-pycs 旗标来重载。
解释器执行时,会逐个翻译字节码,不管之前这个字节码有没有执行过,当前方法有没有执行过,虚拟机启动的时候会初始化一堆和字节码对应的例程,这些例程就是字节码对应的机器码,执行时找到字节码对应的例程并执行例程的本地码
解释执行bytecode的时候不会产生机器码,此时不存在用内存缓存的问题。当某一区域代码反复执行变成热点时才会触发JIT,编译成机器码,此时才有缓存下来的必要,下次执行就是机器码,从而极大提高性能了

⑧ python怎么打开文件模式

读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
读文件
要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:
>>> f = open('/Users/michael/test.txt', 'r')

标示符'r'表示读,这样,我们就成功地打开了一个文件。
如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:
>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'

如果文件打开成功,接下来,调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示:
>>> f.read()'Hello, world!'

最后一步是调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的:
>>> f.close()

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally来实现:
try:
f = open('/path/to/file', 'r')
print(f.read())finally: if f:
f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
with open('/path/to/file', 'r') as f:
print(f.read())

这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的'\n'删掉

file-like Object
像open()函数返回的这种有个read()方法的对象,在Python中统称为file-like Object。除了file外,还可以是内存的字节流,网络流,自定义流等等。file-like Object不要求从特定类继承,只要写个read()方法就行。
StringIO就是在内存中创建的file-like Object,常用作临时缓冲。
二进制文件
前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可:
>>> f = open('/Users/michael/test.jpg', 'rb')>>> f.read()b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

字符编码
要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数,例如,读取GBK编码的文件:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')>>> f.read()'测试'

遇到有些编码不规范的文件,你可能会遇到UnicodeDecodeError,因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况,open()函数还接收一个errors参数,表示如果遇到编码错误后如何处理。最简单的方式是直接忽略:
>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

写文件
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符'w'或者'wb'表示写文本文件或写二进制文件:
>>> f = open('/Users/michael/test.txt', 'w')>>> f.write('Hello, world!')>>> f.close()

你可以反复调用write()来写入文件,但是务必要调用f.close()来关闭文件。当我们写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,还是用with语句来得保险:
with open('/Users/michael/test.txt', 'w') as f:
f.write('Hello, world!')

要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码。
细心的童鞋会发现,以'w'模式写入文件时,如果文件已存在,会直接覆盖(相当于删掉后新写入一个文件)。如果我们希望追加到文件末尾怎么办?可以传入'a'以追加(append)模式写入。
所有模式的定义及含义可以参考Python的官方文档。

⑨ 如何实现python的mysql连接池并加入缓存过期

import MySQLdb
import time
import string
import redis

class PooledConnection:
#构建连接池实例
def __init__(self, maxconnections, connstr,dbtype):
from Queue import Queue
self._pool = Queue(maxconnections) # create the queue
self.connstr = connstr
self.dbtype=dbtype
self.maxconnections=maxconnections
#根据你给数目来创建链接,并且写入刚才创建的队列里面。
try:
for i in range(maxconnections):
self.fillConnection(self.CreateConnection(connstr,dbtype))
except Exception,e:
raise e

def fillConnection(self,conn):
try:
self._pool.put(conn)

except Exception,e:
raise "fillConnection error:"+str(e)

def returnConnection(self, conn):
try:
self._pool.put(conn)
except Exception,e:
raise "returnConnection error:"+str(e)

def getConnection(self):
try:
return self._pool.get()
except Exception,e:
raise "getConnection error:"+str(e)

def ColseConnection(self,conn):
try:
self._pool.get().close()
self.fillConnection(self.CreateConnection(connstr,dbtype))
except Exception,e:
raise "CloseConnection error:"+str(e)

def CreateConnection(self,connstr,dbtype):
if dbtype=='xxx':
pass
elif dbtype=='mysql':
try:
db_conn = connstr.split("#");
#conndb=MySQLdb.connect(db=conf.mydb,host=conf.dbip,user=conf.myuser,passwd=conf.mypasswd);
conndb=MySQLdb.connect(user=db_conn[0],passwd=db_conn[1],host=db_conn[2],port=string.atoi(db_conn[3]),db=db_conn[4]);
conndb.clientinfo = 'datasync connection pool from datasync.py';
conndb.ping();
except Exception, e:
raise 'conn targetdb datasource Excepts,%s!!!(%s).'%(db_conn[2],str(e))
return None

#mysql如下创建连接池:
connstring="xiaorui.cc#xiaoru.cc#xiaorui.cc#3306#dbname";
mysqlpool=PooledConnection(10,connstring,"mysql");
#获取连接:
mysqlpool.getConnection()