python读取txt文件

目录

1.读文件

2.关于open()的mode参数:

3.例子:


在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

1.读文件

要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

f = open('test.txt', 'r')

标示符'r'表示以只读方式打开文件,这样,我们就成功地打开了一个文件。

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在

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

f.read()

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

f.close()

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

try:
    f = open('test.txt', 'r')
    print(f.read())
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open('test.txt', 'r') as f:
    print(f.read())

这和前面的try ... finally是一样的,但是代码更佳简洁,并且不必调用f.close()方法。

python文件对象提供了三个“读”方法: read()、readline() 和 readlines()。每种方法可以接受一个变量以限制每次读取的数据量。

  • read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。如果文件有10G,内存就爆了,为了保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。
  • readlines() 一次读取整个文件并返回list,象 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for ... in ... 结构进行处理。
  • readline() 每次只读取一行,通常比readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 readline()。

如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:

注意:这三种方法是把每行末尾的'\n'也读进来了,它并不会默认的把'\n'去掉,需要我们手动去掉。

文件:

代码:

with open('test.txt', 'r') as f:
    print(f.readlines())

输出: 

去掉'\n'

with open('test.txt', 'r') as f:
    list = f.readlines()
for i in range(0, len(list)):
    #rstrip() 删除 string 字符串末尾的指定字符(默认为空格)
    list[i] = list[i].rstrip('\n')
print(list)

2.关于open()的mode参数:

r':读

'w':写

'a':追加

'r+' == r+w(可读可写,文件若不存在就报错(IOError))

'w+' == w+r(可读可写,文件若不存在就创建)

'a+' ==a+r(可追加可写,文件若不存在就创建)

对应的,如果是二进制文件,就都加一个b就好啦:

'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'

3.例子:

文件格式如下:

#文件格式如下
#时间 特大买单成交量(股) 大买单成交量(股) 中买单成交量(股) 小买单成交量(股)    特大卖单成交量(股) 大卖单成交量(股) 中卖单成交量(股) 小卖单成交量(股) 特大买单成交金额(*100) 大买单成交金额(*100) 中买单成交金额(*100) 小买单成交金额(*100)    特大卖单成交金额(*100) 大卖单成交金额(*100)    中卖单成交金额(*100) 小卖单成交金额(*100) 资金净流入(*100)

20200902    318516220  219740191  202442598  145346084  525567573  367242618  286306137  192043867  334783321430   221143426700   160455962436   94602339494    433776177276   301239190208   204832110249   120639938104   -249591318637
20200903   223312188  199410993  178719377  152127174  341225007  281349829  250664639  186214027  231780516957   199556114436   144084298648   100417175597   293348257021   241912577341   179113193617   116545293491   -156289060416
20200904   232393823  185595779  191135633  170489180  320735346  203114740  188915495  147991632  186928489504   163257126820   143409004929   109248071467   252977430459   175582715437   144615333670   97767150603    -68574891049
20200907   268545057  210126606  175338439  160350584  282467031  256370214  209320202  166267010  244222191516   208504707046   140276526820   104468907865   237108717183   229211911056   161352502634   106400173585   -36738709111

split() 通过指定分隔符对字符串进行分割,返回值为分割后的字符串列表

float() 函数用于将整数和字符串转换成浮点数

int() 函数用于将一个字符串或数字转换为整型

def MakeVol (fVal):
    strVal = '---'
    strWan = '万'
    strYi = '亿'
    NUM_WAM = 10000
    NUM_YI = 100000000
    NUM_WAN_YI = 1000000000000
    if abs(fVal) < NUM_WAM:
        strVal = '{:.2f}'.format(fVal)
    elif abs(fVal) < NUM_YI:
        strVal = '{:.2f}{}'.format(fVal / NUM_WAM, strWan)
    elif abs(fVal) < NUM_WAN_YI:
        strVal = '{:.2f}{}'.format(fVal / NUM_YI, strYi)
    else:
        strVal = '{:.2f}{}{}'.format(fVal / NUM_WAN_YI, strWan, strYi)
    print(strVal)

#时间 特大买单成交量(股) 大买单成交量(股) 中买单成交量(股) 小买单成交量(股)	特大卖单成交量(股) 大卖单成交量(股) 中卖单成交量(股) 小卖单成交量(股) 特大买单成交金额(*100) 大买单成交金额(*100) 中买单成交金额(*100) 小买单成交金额(*100)	特大卖单成交金额(*100) 大卖单成交金额(*100)	中卖单成交金额(*100) 小卖单成交金额(*100) 资金净流入(*100)
#一、解析文件并将数据加载到内存中
#1.读取文件到mfList中
with open('stat_day_800881126.txt', 'r') as file:
	mfList = file.readlines()
#2.对文件进行解析,并将数据放入mfDict中
#key:日期 value:list[[0,1,2,3,4,5],[0,1,2,3,4,5]] list[0]主力资金列表:1 2 3 5 10 20日资金数据,list[1]资金列表。
mfDict = {}
for i in range(0, len(mfList)):
	#去掉每行中的换行符\n
	mfList[i] = mfList[i].rstrip('\n')
	#对每行中的数据根据\t分割后放入mfListItem List中,并将其替换到mfList中
	mfListItem = mfList[i].split('\t')
	mfList[i] = mfListItem
	#mfListItem的首个字段是日期
	strDate = mfListItem[0]
	dayNumMfList = []
	dayNumMainMfItemList = []
	dayNumMfItemList = []
	dayNum = 0
	NetInflowSum = 0.0
	MainNetInflowSum = 0.0
	while dayNum < 20:
		if (i - dayNum) >= 0:
			dateMf = mfList[i - dayNum]
			MainNetInflow = 0.0
			NetInflow = 0.0
			#主力资金净流入
			MainNetInflow = (float(dateMf[9]) + float(dateMf[10]) - float(dateMf[13]) - float(dateMf[14]))/100
			#资金净流入
			NetInflow = (float(dateMf[9]) + float(dateMf[10]) + float(dateMf[11]) + float(dateMf[12]) - float(dateMf[13]) - float(dateMf[14]) - float(dateMf[15]) - float(dateMf[16]))/100
			#dayNum+1日主力资金净流入
			MainNetInflowSum = MainNetInflowSum + MainNetInflow
			#dayNum+1日资金净流入
			NetInflowSum = NetInflowSum + NetInflow
			if (dayNum + 1) in [1, 2, 3, 5, 10, 20]:
				dayNumMainMfItemList.append(MainNetInflowSum)
				dayNumMfItemList.append(NetInflowSum)
		dayNum = dayNum + 1
	dayNumMfList.append(dayNumMainMfItemList)
	dayNumMfList.append(dayNumMfItemList)
	mfDict[strDate] = dayNumMfList
print(mfDict)
#二、从内存中查找所需数据
dayNumDic = {'1': 0, '2': 1, '3': 2, '5': 3, '10': 4, '20': 5}
while (1):
	strInput = input('input:"date,dayNum(1,2,3,5,10,20),type(1:block,2:stock)",exmple:"20210113,20,1"  input 0 to exit:\n')
	if(strInput == '0'):
		break
	strList = strInput.split(',')
	if strList.__len__() < 3:
		print('invalid input!')
		continue
	#日期
	date = strList[0]
	#n日资金数据
	mfDayNum = strList[1]
	#type=1,板块数据;type=2,个股数据。
	type = strList[2]
	if (type in ['1', '2']) and (mfDayNum in ['1', '2', '3', '5', '10', '20']):
		if mfDict.__contains__(date):
			nNetInflow = 0.0
			dateMfData = mfDict[date][int(type) - 1]
			print(dateMfData)
			if len(dateMfData) > dayNumDic[mfDayNum]:
				nNetInflow = dateMfData[dayNumDic[mfDayNum]]
				print("net_inflow:", nNetInflow)
				MakeVol(nNetInflow)
			else:
				print('no data')
		else:
			print("not find this date.")
	else:
		print("invalid input")

参考:

https://www.cnblogs.com/zywscq/p/5441145.html python文件读写小结

https://www.liaoxuefeng.com/wiki/1016959663602400/1017607179232640 文件读写

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值