baiyuzhu1016 发表于 2020-4-10 14:58:38

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

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)
    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 呢???

qiuyouzhi 发表于 2020-4-10 15:04:23

遍历文件是直接一行一行的比较的。
你可以把==改成in,或者把
电话号码改成:




这样子。

BngThea 发表于 2020-4-10 15:10:16

为什么用writelines,看你的代码,直接用write吧

baiyuzhu1016 发表于 2020-4-10 15:13:16

BngThea 发表于 2020-4-10 15:10
为什么用writelines,看你的代码,直接用write吧

改完了,可是count还是0 啊

sunrise085 发表于 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模块

baiyuzhu1016 发表于 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)
    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)

sunrise085 发表于 2020-4-10 15:42:38

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

你有没有打开文件去看一下呢?运行完程序后,file_3应该是你从file_1中取出来的各行的前七位,你看看对不对?
你用的是什么系统的电脑?有没有看到我在4楼写的最后一行?

baiyuzhu1016 发表于 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+os.linesep)
求大佬帮忙看看是不是这个意思,运行结果还是0

sunrise085 发表于 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的内容。

自己多想想,要学会思考哈

zltzlt 发表于 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)
    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)

baiyuzhu1016 发表于 2020-4-13 08:16:09

zltzlt 发表于 2020-4-10 17:40
不建议边读边写,这样试试:

还是不行呢,是文件3的每一行要与文件2的每一行做比较,如果存在了count+1,然后比较结束

baiyuzhu1016 发表于 2020-4-13 08:17:36

zltzlt 发表于 2020-4-10 17:40
不建议边读边写,这样试试:

而且文件3中确实在文件2中能找到,但是的文件2是在Excel里面粘到TXT文档中的,我怀疑他们俩肯定是有格式上的差别,但是用眼睛看也看不出来

baiyuzhu1016 发表于 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)
    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
页: [1]
查看完整版本: 求助下我想根据手机前7位统计下手机归属数量,为什么count一直是0呢