鱼C论坛

 找回密码
 立即注册
查看: 235|回复: 13

求助下我想根据手机前7位统计下手机归属数量,为什么count一直是0呢

[复制链接]
发表于 2020-4-10 14:58:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
file_1=open("E:\\mv\\python试用\\手机号码1.txt")
file_2=open("E:\\mv\\python试用\\gs.txt")
file_3 = open("E:\\mv\\python试用\\前7位.txt", "r+")
count=0
for each_line in file_1:
    file_3.writelines(each_line[0:7])
    file_3.writelines("\n")
file_1.close()
for each_line_1 in file_3:#比较file_3中的每一行是不是已经在file_2里面存在了?这个对吗
    for each_line_2 in file_2:
        if each_line_1 == each_line_2:
            count += 1
            break

file_2.close()
file_3.close()

print(count)

#file_1是所有需要确认归属的手机号码
#file_2是根据前7位号码已知的归属文件
#file_3是我把file_1前7位提取出来了
#问题是为什么count一直等于0 呢???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-10 15:04:23 | 显示全部楼层
遍历文件是直接一行一行的比较的。
你可以把==改成in,或者把
电话号码改成:




这样子。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-10 15:10:16 | 显示全部楼层
为什么用writelines,看你的代码,直接用write吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-10 15:13:16 | 显示全部楼层
BngThea 发表于 2020-4-10 15:10
为什么用writelines,看你的代码,直接用write吧

改完了,可是count还是0 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-10 15:24:17 | 显示全部楼层
本帖最后由 sunrise085 于 2020-4-10 15:29 编辑

因为file_3文件写完之后直接读是读不到任何东西的,因为此时文件光标在文件末尾
有两种方式
第一种,写完之后,关闭文件,然后读的时候再打开,这样比较安全,而且能保证内容写入了文件。
第二种,直接移动文件光标,file_3.seek(0,0)直接将光标移动到文件开头。

注意,非二进制文件建议只使用将光标移动到开头或末尾的功能,seek不要随便移动,尽量只是用seek(0,0) 和seek(0,2),前者是移动光标到文件开头,后者是移动光标到文件末尾。

另外写文件,你的这种内容,建议使用write
若使用writelines,请把内容后面添加行结束字符后,一次性写入。我不知道你分两次写会不会有什么差错,没有尝试过
还有,不要使用'\n',请使用os.linesep。这个是当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n'),需要import os模块
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-10 15:32:46 | 显示全部楼层
sunrise085 发表于 2020-4-10 15:24
因为file_3文件写完之后直接读是读不到任何东西的,因为此时文件光标在文件末尾
有两种方式
第一种,写完 ...

非常感谢大佬的细心讲解,我已经将程序修改了在创建完file_3后,将指针指向开始位置,但是运行完了count还是0?您帮我看下我修改对吗,我是正确理解你的意思了吗
file_1=open("E:\\绝地求生\\python试用\\绝地求生手机号码1.txt")
file_2=open("E:\\绝地求生\\python试用\\长春.txt")
file_3 = open("E:\\绝地求生\\python试用\\绝地求生前7位.txt", "r+")
count=0
for each_line in file_1:
    file_3.write(each_line[0:7])
    file_3.write("\n")
file_1.close()
file_3.seek(0,0)
for each_1 in file_3:
    for each_2 in file_2:
        if each_1 == each_2:
            count += 1
            break

file_2.close()
file_3.close()

print(count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-10 15:42:38 | 显示全部楼层
baiyuzhu1016 发表于 2020-4-10 15:32
非常感谢大佬的细心讲解,我已经将程序修改了在创建完file_3后,将指针指向开始位置,但是运行完了count ...

你有没有打开文件去看一下呢?运行完程序后,file_3应该是你从file_1中取出来的各行的前七位,你看看对不对?
你用的是什么系统的电脑?有没有看到我在4楼写的最后一行?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-10 15:59:07 | 显示全部楼层
sunrise085 发表于 2020-4-10 15:42
你有没有打开文件去看一下呢?运行完程序后,file_3应该是你从file_1中取出来的各行的前七位,你看看对不 ...

E:\绝地求生\python试用\捕获.PNG
E:\绝地求生\python试用\捕获2.PNG
我是win10系统,然后file_3的内容可以正常前7位进行分割,file_1是我在ecxel表格中站出来的也可以正常显示,然后我将程序部分改成你说的那样
for each_line in file_1:
    file_3.write(each_line[0:7]+os.linesep)
求大佬帮忙看看是不是这个意思,运行结果还是0

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-10 17:15:35 | 显示全部楼层
baiyuzhu1016 发表于 2020-4-10 15:59
我是win10系统,然后file_3的内容可以正常前7位进行分割,file_1是我在ecxel表格中站出来的也可以正 ...

你打开file_3.txt看一下内容是不是你存进去的内容?

若不是的话,那问题就出在前面一个for循环内了。
若是的话,那问题就出在后面的循环了。

若不会调试的话,可以在下面的for循环中用print看一下each_1和each_2的内容。

自己多想想,要学会思考哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-10 17:40:25 | 显示全部楼层
不建议边读边写,这样试试:
file_1 = open("E:\\mv\\python试用\\手机号码1.txt")
file_2 = open("E:\\mv\\python试用\\gs.txt")
file_3 = open("E:\\mv\\python试用\\前7位.txt", "a")
count = 0
for each_line in file_1:
    file_3.write(each_line[0:7])
    file_3.write("\n")
file_1.close()
file_3 = open("E:\\mv\\python试用\\前7位.txt")
for each_line_1 in file_3:
    each_line_2 = file_3.readline()
    if each_line_1 == each_line_2:
        count += 1
        break

file_2.close()
file_3.close()

print(count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 08:16:09 | 显示全部楼层
zltzlt 发表于 2020-4-10 17:40
不建议边读边写,这样试试:

还是不行呢,是文件3的每一行要与文件2的每一行做比较,如果存在了count+1,然后比较结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 08:17:36 | 显示全部楼层
zltzlt 发表于 2020-4-10 17:40
不建议边读边写,这样试试:

而且文件3中确实在文件2中能找到,但是的文件2是在Excel里面粘到TXT文档中的,我怀疑他们俩肯定是有格式上的差别,但是用眼睛看也看不出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 08:50:44 | 显示全部楼层
zltzlt 发表于 2020-4-10 17:40
不建议边读边写,这样试试:

file_1=open("E:\\绝地求生\\python试用\\绝地求生手机号码1.txt")
file_2=open("E:\\绝地求生\\python试用\\长春.txt")
file_3 = open("E:\\绝地求生\\python试用\\绝地求生前7位.txt", "a")
count=0
import os
for each_line in file_1:
    file_3.write(each_line[0:7])
    file_3.write("\n")
file_1.close()
file_3 = open("E:\\绝地求生\\python试用\\绝地求生前7位.txt")
r3=list(file_3)
r2=list(file_2)
for each_1 in r3:
    for each_2 in r2:
        if each_1==each_2:
            count += 1
            break

file_2.close()
file_3.close()

print(count)
#结合你说的,我改成list居然可以运行出来,但是file模式下还是0,不知道为什么
F:\Anaconda\python.exe F:/小甲鱼0基础python入门/第30讲文件系统:介绍一个高大上的东西/iphonenumber.py
3263

Process finished with exit code 0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 11:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表