python读取txt文件_python 爬虫第一课:文件读取

python 环境

mac自带的是2.7,首先需要升级到python3

使用homebrew升级,先安装Homebrew

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后使用brew install

brew install python3

查看python3 --version 是 3.7.4

我用的编译器是VSCode,不知道为什么要求装pip

sudo easy_install pip

如果要在 VSCode 里面直接运行 python,需要选择对应的 python interpreter(否则默认用的是python 2)

方法文档理由说明,如下

From within VS Code, select a Python 3 interpreter by opening the Command Palette(⇧⌘P), start typing the Python: Select Interpreter command to search, then select the command.

做完这些,终于可以运行成功了,之前是python2,会不认识encoding这个参数

c248ea2130acee1136f2e93674acabca.png

读取文件三步

open - read - close

打开

三个参数:绝对路径,权限,编码方式

file1 = open('/Users/lesliepeng/Desktop/test/abc.txt','r',encoding='utf-8')

读取

read

关闭

file.close()

同时能打开的文件数量有限,所以需要close

写入文件三步

file1 = open('/Users/lesliepeng/Desktop/test/abc.txt','w',encoding='utf-8') 
file1.write('张无忌n')
file1.write('杨逍n')

打开文件看一下,发现文件内容被重写了,之前的赵敏周芷若没有了

'w'写入模式会给你暴力清空掉文件,然后再给你写入。如果你只想增加东西,而不想完全覆盖掉原文件的话,就要使用'a'模式,表示append。

最后一步还是要关闭close

问题

是不是要先print再close ?可是内容不是已经存在content里了吗。。

d8a86b793b3f59edabc7df31baaba57b.png

这里再顺便补充一个用法,为了避免打开文件后忘记关闭,占用资源或当不能确定关闭文件的恰当时机的时候,我们可以用到关键字with,之前的例子可以写成这样:

# 普通写法
file1 = open('abc.txt','a') 
file1.write('张无忌') 
file1.close()

# 使用with关键字的写法
with open('abc.txt','a') as file1:
#with open('文件地址','读写模式') as 变量名:
    #格式:冒号不能丢
    file1.write('张无忌') 
    #格式:对文件的操作要缩进
    #格式:无需用close()关闭

练习

文件adb.txt

罗恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
马尔福 100 85 90

需要统计他们的总分然后存在另一个文件里

使用 readlines() 可以一行一行的读取文件内容,并存储为一个数组

file1 = open('/Users/lesliepeng/Desktop/test/abc.txt','r',encoding='utf-8') 
content = file1.readlines()
file1.close()
print(content)

打印看结果

['罗恩 23 35 44n', '哈利 60 77 68 88 90n', '赫敏 97 99 89 91 95 90n', '马尔福 100 85 90']

然后我们可以遍历每一个数组成员,将里面的字符拆出来,需要用到一个字符串方法叫做 split()

for i in file_lines:
    data =i.split() 

如果打印每一个data

['罗恩', '23', '35', '44']
['哈利', '60', '77', '68', '88', '90']
['赫敏', '97', '99', '89', '91', '95', '90']
['马尔福', '100', '85', '90']

然后就可以再遍历每一个data,把第一位以后的都加起来算总分,注意数据类型的转换:

sum = 0                    #先把总成绩设为0
    for score in data[1:]:     #遍历列表中第1个数据和之后的数据
        sum = sum + int(score) 

总的代码

file = open('/Users/Ted/Desktop/scores.txt','r',encoding='utf-8') 
file_lines = file.readlines()
file.close()

final_scores = [] 

for i in file_lines:
    data =i.split()    
    sum = 0                    
    for score in data[1:]:     
        sum = sum + int(score)     
    result = data[0]+str(sum)+'n'    
    final_scores.append(result)

winner = open('/Users/Ted/Desktop/winner.txt','w',encoding='utf-8') 
winner.writelines(final_scores)
winner.close()

16行的代码是以writelines()的方式写进去,为什么不能用write()?因为final_scores是一个列表,而write()的参数必须是一个字符串,而writelines()可以是序列,所以我们使用writelines()

自己一开始比较麻烦的解法

file1 = open('/Users/lesliepeng/Desktop/test/abc.txt','r',encoding='utf-8') 
content = file1.readlines()
file1.close()
score=['']

for i in content:
    data = i.split()
    #print(data)
    sum = 0
    for num in data[1:]:
        sum = sum+int(num)
    #print(sum)
    stu = ['']
    stu[0]=data[0]
    stu.append(str(sum))
    #print(stu)
    file2 = open('/Users/lesliepeng/Desktop/test/score.txt','a',encoding='utf-8')
    a=''
    b=a.join(stu) 
    file2.write(b)
    file2.close()

其实是可以直接用加号拼接字符串的,可见字符串的拼接没有掌握好

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值