python 去除字符串的标点符号 用_Python输入和输出

本文介绍了Python中input和print用于用户交互,重点讲解了如何处理文件输入输出,包括读取文件并去除标点和换行符,统计词频,以及使用json进行数据转换。同时提醒在处理大文件时应注意内存使用,可以使用readline()逐行读取。
摘要由CSDN通过智能技术生成

点击上方Python知识圈,设为星标

回复1024获取Python资料

5d5d1fe6aaa99f3ad62192615b01eedc.png

阅读文本大概需要 5 分钟

近期精彩文章 Python100例(附PDF下载地址)

在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以使用input和print语句来完成这些功能。

input

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

###### 输入 ######
your name:Runsen
you are a boy?:y

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. Runsen.

input函数暂停运行,等待键盘输入,直到按下回车,输入的类型永远时字符串

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

文件输入和输出

生产级别的 Python 代码,大部分 I/O 则来自于文件

这里有个in.text,完成worldcount功能。

Mr. Johnson had never been up in an aerophane before and he had read a lot about air accidents, so one day when a friend offered to take him for a ride in his own small phane, Mr. Johnson was very worried about accepting. Finally, however, his friend persuaded him that it was very safe, and Mr. Johnson boarded the plane.

His friend started the engine and began to taxi onto the runway of the airport. Mr. Johnson had heard that the most dangerous part of a flight were the take-off and the landing, so he was extremely frightened and closed his eyes.

After a minute or two he opened them again, looked out of the window of the plane, and said to his friend。

"Look at those people down there. They look as small as ants, don't they?"

"Those are ants," answered his friend. "We're still on the ground."

现在

  • 读取文件
  • 去掉所有标点和换行符,将大写变为小写
  • 合并相同的词,统计每个词出现的频率,将词频从大到小排序
  • 将结果按行输出文件out.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('in.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))

########## 输出 (省略较长的中间结果) ##########



4df08ba8374b57ae35302da255afeab7.png

但是有个问题,如果文件非常的大容易造成内存奔溃

这个时候给 read 指定参数 size,还可以通过 readline() 函数,每次读取一行。

json文件读取

import json

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

params_str = json.dumps(params)

print('after json serialization')
print('type of params_str = {}, params_str = {}'.format(type(params_str), params))

original_params = json.loads(params_str)

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

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

after json serialization
type of params_str = <class 'str'>, params_str = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}
after json deserialization
type of original_params = <class 'dict'>, original_params = {'symbol': '123456', 'type': 'limit', 'price': 123.4, 'amount': 23}

json.dumps() 这个函数,接受 Python 的基本数据类型 字典,然后转化string (json的字符串)

json.loads() 这个函数,接受一个合法字符串(json),然后 转化为字典

「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}

参考:https://time.geekbang.org/column/article/96570

40b8bf4bdc0d113ce9433ca1dbbebc25.gif
-----------------------公众号:Python知识圈博客:www.pyzhishiquan.com知乎:Python知识圈微信视频号:菜鸟程序员 (分享有趣的编程技巧、Python技巧)bilibili:菜鸟程序员的日常(目前原创视频:22,累计播放量:85万)

我的微信视频号定时更新中,近期真人出镜分析讲解 Python 经典习题,后续会分享更多的干货,欢迎关注我的微信视频号。

f52d77ef9d91e48555dfa7e0b2997de1.png

Python知识圈公众号的交流群已经建立,群里可以领取 Python 相关学习资料,大家可以一起学习交流,效率更高,如果是想发推文、广告、砍价小程序的敬请绕道!一定记得备注「交流学习」,不然不会通过好友。

07a0df4323bcabb97d6aa79f7fdb5058.png扫码添加,备注:交流学习

往期推荐01

公众号所有文章汇总导航(2-10更新)

02

Python100例(附PDF下载地址)

03

打基础一定要吃透这12类 Python 内置函数

↓点击阅读原文查看pk哥原创视频

我就知道你“在看”50144ddf1888977f0dbd9b5f4fbdd31c.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值