python系列 - 输入和输出

输入输出基础

最简单的输入输出来源于键盘操作

name = input('your name:')
gender = input('you are a boy?(y/n)')

###### 输入 ######
your name:Jack
you are a boy?

welcome_str = 'Welcome to the matrix {prefix} {name}.'
welcome_dic = {
    'prefix': 'Mr.' if gender == 'y' else 'Mrs',
    'name': name
}

print('authorizing...')
print(welcome_str.format(**welcome_dic))

########## 输出 ##########
authorizing...
Welcome to the matrix Mr. Jack.

input()会暂停函数运行,同时等待键盘输入,直到回车键被按下,参与内容即为提示语;输入的类型永远是字符串型str()

a = input()
1
b = input()
2

print('a + b = {}'.format(a + b))
########## 输出 ##############
a + b = 12
print('type of a is {}, type of b is {}'.format(type(a), type(b)))
########## 输出 ##############
type of a is <class 'str'>, type of b is <class 'str'>
print('a + b = {}'.format(int(a) + int(b)))
########## 输出 ##############
a + b = 3

👻👻👻ATTENTION:
将str强制转换成int,再进行计算
进行强制转换时,最好加上异常处理机制try except

文件输入输出

比如:统计一个txt文本内每个单词出现的频率,并按照次频从大到小排列

import re
# 你不用太关心这个函数
def parse(text):
    # 使用正则表达式去除标点符号和换行符
    text = re.sub(r'[^\w ]', ' ', text)
    # 转为小写
    text = text.lower()
    # 生成所有单词的列表
    word_list = text.split(' ')
    # 去除空白单词
    word_list = filter(None, word_list)
    # 生成单词和词频的字典
    word_cnt = {}
    for word in word_list:
        if word not in word_cnt:
            word_cnt[word] = 0
        word_cnt[word] += 1
    # 按照词频排序
    sorted_word_cnt = sorted(word_cnt.items(), key=lambda kv: kv[1], reverse=True)
    return sorted_word_cnt
with open('words.txt', 'r') as fin:
    text = fin.read()
word_and_freq = parse(text)
with open('out.txt', 'w') as fout:
    for word, freq in word_and_freq:
        fout.write('{} {}\n'.format(word, freq))

运行结果:生成out.txt文件,文件内容如下(只截取了一部分):
image.png
通过上面的例子,可以了解到,python文件操作可以分为以下几步:
STEP1:需要先用open()函数拿到文件的指针(第一个参数指定文件位置,第二个参数表示权限)

👻👻👻ATTENTION:
常用文件权限
r——读取
w——写入
rw——读写
a——追加(这样打开的文件,如果需要写入,会从原始文件的末位开始写入)

STEP2:通过read()读取文件全部内容,并将需要的内容写入到新文件中
代码中text = fin.read()表示把所有文件内容读取到内存中并赋值
👻👻👻ATTENTION:
优点:方便调用
缺点:文件过大,一次性读取可能会造成内存崩溃
解决方案:

  • 给rread()指定参数size,用来表示读取的最大长度
  • 通过readline(),每次读取一行

👻👻👻TIPS:
write()表示写入
STEP3:关闭文件
open()对应close(),通常情况下,若打开文件,那么在完成读取后,应该like关掉文件(使用close)
但上述例子中,关闭文件并没有使用close(),这里需要注意:如果使用了**with()**语句,就不需要显式调用**close()**,因为在with执行完毕后,close()函数会自动被调用
注意:所有的I/O都应该有错误处理!!!

JSON序列化

json.dumps():接收python的基本数据类型,然后将其序列化为string(存储)
json.loads():接收一个合法字符串,然后将其反序列化为python的基本数据类型 (读取)

import json
params = {
    'symbol':'123456',
    'type':'limit',
    'price':123.4,
    'amount':23
}

params_str = json.dumps(params)
print(type(params_str),params)

original_params = json.loads(params_str)
print(type(original_params), original_params)

运行结果如下:
image.png
那么json文件的读取:

import json
params = {
    'symbol': '123456',
    'type': 'limit',
    'price': 123.4,
    'amount': 23
}
with open('params.json', 'w') as fout:
    params_str = json.dump(params, fout)

with open('params.json', 'r') as fin:
    original_params = json.load(fin)

print('after json deserialization')
print('type of original_params = {}, original_params = {}'.format(type(original_params), original_params))

########## 输出 ##########

after json deserialization
type of original_params = <class 'dict'>, original_params = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}
posted @ 2023-02-20 10:51  莫伊101  阅读(47)  评论(0编辑  收藏  举报