设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

集中答疑专用贴

  [复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

141#
发表于 2016-12-24 21:12:22 |只看该作者
stugpanzer 发表于 2016-12-24 15:31
import re
import urllib
import urllib.request as request

嗯。看报错的时候,具体看下它提示报错在哪一行,对查找问题有帮助
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

142#
发表于 2016-12-26 10:44:00 |只看该作者
本帖最后由 stugpanzer 于 2016-12-26 10:52 编辑

txt文件中有三列,现在要求第三列数字的和
文件已经放到根目录下
data.txt:
d0 sp 0
d1 sp 1
d2 sp 2
d3 sp 3
d4 sp 4
d5 sp 5
d6 sp 6
d7 sp 7
d8 sp 8
d9 sp 9
-------------
import sys
def data_sum():
        datasum=0
        ss=open("data.txt")
        for line in ss:
                raw=line.split()
                datasum+=int(raw[2],10)
        print (datasum)
----------------
运行后,不提示错误,但IDLE中没有任何显示,求解决
以为是open函数用错了,但把open("data.txt")改为readline或者read,还是同样的问题


附带:Python速度比C慢一些,目前我的水平还不够写C与Python交互,纯粹就Python下编程而言,如果这个data.txt是上百万行乃至几千万行的话,如何能让速度快一些?

代码是从网上找来的,后来自己独立敲了一遍
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

143#
发表于 2016-12-26 13:16:07 |只看该作者
stugpanzer 发表于 2016-12-26 10:44
txt文件中有三列,现在要求第三列数字的和
文件已经放到根目录下
data.txt:

1.你定义了一个函数 data_sum,但你并没有调用它。参考函数相关的基础
2.提高运行效率可以去了解一下 PyPy
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

144#
发表于 2016-12-26 16:44:09 |只看该作者
本帖最后由 stugpanzer 于 2016-12-26 17:06 编辑
crossin先生 发表于 2016-12-26 13:16
1.你定义了一个函数 data_sum,但你并没有调用它。参考函数相关的基础
2.提高运行效率可以去了解一下 PyP ...

问题已解决,多谢

测试了一下,运行450万行的数据,运行时间大致在2.5秒左右,是否已经达到了纯Python语言单线程运行的极限?

还有一个问题,用多线程是否可以解决千万行级别的数据求和问题?加上PV互斥操作?

了解了一下pypy和cpython,似乎pypy速度快一些,但属于空间换时间的策略,预编译时间也长,关键是功能和对库的支持远不如cpython强大

我本科是学CS专业的,毕业后工作不好,找托关系进了一个不需要CS专业知识的岗位,前几天才重新拾起编程,数据结构和操作系统还有算法设计之类的课程都学过,不过本科时编的程序比较少,但原理是懂的,现在由于是业余时间挤出时间学Python,其他杂事也比较多,算下来一天也就两三个小时能学Python,打算自学主攻的方向是网络通信与网络安全,数据抓取与分析这两个方面,从时间耗费与效费比方面,考虑到这两个方面的IO吞吐是主要瓶颈,数据计算次之,是否我应该暂时放弃pypy而去使用cpython?
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

145#
发表于 2016-12-26 19:53:28 |只看该作者
在知乎上看到有人说的一句话代码返回文件中最长的一行的数量
--------
max(len(x.strip()) for x in open("file name"))
---------
open函数打开文件,返回值如果是以行为单位,那么前面的x.strip()是否多此一举,直接写成x岂不更好?因为strip函数是去掉括号内字符,既然括号内为空,那么x.strip()执行后返回的还不是x一整行吗?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

146#
发表于 2016-12-27 10:00:34 |只看该作者
stugpanzer 发表于 2016-12-26 19:53
在知乎上看到有人说的一句话代码返回文件中最长的一行的数量
--------
max(len(x.strip()) for x in open(" ...

默认的strip()是去掉首尾的空白符,包括空格、tab、换行符等
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

147#
发表于 2016-12-27 10:03:32 |只看该作者
stugpanzer 发表于 2016-12-26 16:44
问题已解决,多谢

测试了一下,运行450万行的数据,运行时间大致在2.5秒左右,是否已经达到了纯Python语 ...

关于性能方面我了解得也不多,没法给你很好的建议。

python的多线程,如果不是对于io或网络等待的情况,仅仅是计算来说,有可能并不能提升效率。在多核上cpu上用多进程更好些。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

148#
发表于 2016-12-28 00:22:19 |只看该作者
本帖最后由 stugpanzer 于 2016-12-28 00:38 编辑
crossin先生 发表于 2016-12-27 10:03
关于性能方面我了解得也不多,没法给你很好的建议。

python的多线程,如果不是对于io或网络等待的情况, ...

谢谢指引

今天看了一下多进程的知识,发现倒不是想象中的那么复杂,但敲出来的代码运行不了
---------
from multiprocessing import Process
import threading
import time
  
def foo(i):
    print ('say hi',i)
  
for i in range(10):
    p = Process(target=foo,args=(i,))
    p.start()
------------
运行后不报错,但shell窗口无反应
反应似乎和我上一个问题差不多,定义了函数而未执行,就会出现这种不报错但无反应的状况,但是Process函数已经执行了foo函数,为什么还会出现这样的问题?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

149#
发表于 2016-12-28 16:00:44 |只看该作者
stugpanzer 发表于 2016-12-28 00:22
谢谢指引

今天看了一下多进程的知识,发现倒不是想象中的那么复杂,但敲出来的代码运行不了

我试了下你的代码是可以运行的,正常输出:

say hi 0
say hi 1
say hi 2
say hi 3
say hi 4
say hi 5
say hi 6
say hi 7
say hi 8
say hi 9

换个运行环境试试看,可能你用的编辑器输出不支持多进程使用。直接在命令行下 python xxx.py 运行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

45

积分

新手上路

Rank: 1

150#
发表于 2016-12-28 20:29:57 |只看该作者
本帖最后由 stugpanzer 于 2016-12-28 21:48 编辑
crossin先生 发表于 2016-12-28 16:00
我试了下你的代码是可以运行的,正常输出:

say hi 0

我的编辑器就是系统自带的IDLE,不可能存在不支持的问题吧

虽然无反应,但输入foo(2)函数表达式,运行出了结果“say hi 2”,给我的感觉就是程序跑了但没显示,十分奇怪

PS:安装Ubuntu时,紫色的开始界面完后,提示不能显示此视频格式,请将分辨率调至1920X1080,禁用了独显后再安装还是这个问题,有解决方法没有?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 08:41 , Processed in 0.020179 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部