LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

OOo,TeX,KO,ABI,GIMP,Picasa,ProE,QCAD,Inkscape,Kicad,Eagle
回复
xukong
帖子: 14
注册时间: 2005-10-11 10:06

LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

#1

帖子 xukong » 2008-11-06 16:50

此程序使用 python 编写,可以在 windows linux mac(苹果系统下使用),我改进这款软件就是因为在LINUX下觉得没有一款好用的图片浏览软件,

而我使用 Mangameeya 7.4 这个图片浏览软件觉得很好用,但是这款软件只能在windows下使用,然后最近觉得PYTHON很好用,因为经过实际应用的某次对比,

在那次实际应用的解决中PYTHON的处理速度比RUBY快20倍,这次又在网上发现一款PYTHON编写的图片浏览软件cornice(http://wxglade.sourceforge.net/extra/cornice.html)不错,

又是开放源代码的,正好学习PYTHON来改写它,方便自己在LINUX下看图片,看漫画等...

又能加深对PYTHON的学习,一举两得,呵,呵,所以劲头十足,从1103到1106三天就改进得基本可用,觉得可以和MANGAMEEYA比美一下...

20081105
改进基本结束,自我感觉很顺手.功能特点有
1.快捷键使用很方便,用鼠标选则目录后窗口右边显示缩略图(建议将默认显示模式设置为缩略图显示),然后程序焦点自动定位到右边缩略图的第一张,按下空格键即进入单张图片的浏览界面
这时可以用鼠标滚轮上下浏览图片,键盘快捷键(一只手就能够操作浏览图片,爽)分别是
d(own或者空格键,pgdn) 下一张图片
b(ack pgup) 上一张图片
f(ullsize) 图片适应屏幕或者图片实际大小切换
s(creen) 全屏幕浏览
p(lay) 幻灯片播放
j(ump) 往前跳3张
h(ome) 往后跳3张
g(uan关) 退出图片浏览界面,进入缩略图浏览模式
按g退出后如果在前面浏览觉得此目录的图片不再需要,可以按v(原来是t的,但是发现手指活动范围还是大了,最后还是换成v,这样手指的活动范围最小)可以将此目录加入到删除列表中(可针对不同的目录重复执行)
然后选择 Edit 菜单中的 Delete Del 就可以删除这些不需要的目录了,方便管理图片,呵,呵

2程序标题栏和状态栏中显示得有当前目录文件总数和看到哪一张了,方便浏览图片

这个软件还可以看压缩包中的图片,和MANGAMEEYA一样,但是只能浏览ZIP包中的图片,RAR的暂时还不支持

声明: 这款软件肯定还很不完善,我只是抛砖引玉,希望看到有高手能更加改进...
附件
cornice.rar
(580.36 KiB) 已下载 100 次
上次由 xukong 在 2008-11-09 23:04,总共编辑 8 次。
来时一见蟠桃熟,别后三惊碧海干.
xukong
帖子: 14
注册时间: 2005-10-11 10:06

Re: LINUX下运行,PYTHON编写,操作方便参照mangameeya 7.4编写的图片浏览软件,多平台运行,内详...

#2

帖子 xukong » 2008-11-06 16:51

为方便大家体验,说一下在WIN下的安装说明

安装说明:
1.先安装python-2.5.2.msi
安装运行虚拟机

2.安装wxPython2.8-win32-unicode-2.8.9.1-py25.exe
安装图形界面库

3.安装PIL-1.1.6.win32-py2.5.exe
安装图形处理库

4.解压cornice.zip
执行里面的 run.bat 即可
来时一见蟠桃熟,别后三惊碧海干.
xukong
帖子: 14
注册时间: 2005-10-11 10:06

Re: LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

#3

帖子 xukong » 2008-11-06 16:57

LINUX下的安装就更方便了 sudo apt-get install wxVersion (好象是,记不清了)安装WXPYTHON在LINUX下的运行库即可,而后进入 cornice 目录, 执行 python cornice 即可
来时一见蟠桃熟,别后三惊碧海干.
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

#4

帖子 xiooli » 2008-11-06 17:08

python比ruby快20倍?不会吧,我很喜欢ruby呢,不太习惯python。。。
xukong
帖子: 14
注册时间: 2005-10-11 10:06

Re: LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

#5

帖子 xukong » 2008-11-06 17:50

呵,呵,实际应用的结果陈述,没有夸大 下面2段代码,我是先写了RUBY,然后参照写了几乎一样的PYTHON代码,都没有使用什么编程技巧,程序中处理到的2个文件行数大概都在200万行左右,RUBY运行要20分钟,PYTHON只要1分钟,那2个文件因为牵涉到手机号码,不方便公开,如果你需要,我可以处理一下然后提供,你运行下就知道了...

require 'date'

def format_data(inc_value, type, src_gateway, dest_gateway, first_value)
arrdata = first_value.split(",")
tmp_date = (arrdata[6])[10..11]
tmp_date2 = (arrdata[6])[13..14]
tmp_date3 = (arrdata[6])[16..17]

ic = tmp_date.index(":")

if ((ic != nil) && (ic > 0))
#if (tmp_date == "0:")
tmp_date = "0" + tmp_date[0..0]
tmp_date2 = (arrdata[6])[12..13]
tmp_date3 = (arrdata[6])[15..16]
end
field13_1 = "0" + (arrdata[6])[5..5] + (arrdata[6])[7..8] + tmp_date + tmp_date2
field13 = "2008" + "0" + (arrdata[6])[5..5] + (arrdata[6])[7..8] + tmp_date + tmp_date2 + tmp_date3
while inc_value.length < 7 do
inc_value = "0" + inc_value
end

field01 = field13_1 + "0851" + "5" + inc_value
field02 = type
field03 = " " + arrdata[3]
field04 = " " + (arrdata[4])[0..10]
field05 = "0"
field06 = (arrdata[0])[0..3]
field07 = "0"
field08 = arrdata[5]
field09 = src_gateway
field10 = " "
if (field02 == "00")
field10 = "15 "
end
field11 = dest_gateway
field12 = "13800851500"
field14 = field13
result_value = field01 + "\t" + field02 + "\t" + field03 + "\t" + field04 + "\t" + field05 + "\t" + field06 + "\t" + field07 + "\t" + field08 + "\t" + field09 + "\t"+ field10 + "\t"+ field11 + "\t" + field12 + "\t" + field13 + "\t" + field14
#puts "start" + result_value + "end"
return result_value
end

#####################################
time = Time.now

date_and_time = '%H-%M-%S'

ds = time.strftime(date_and_time)

ds_start = ds

puts "时间格式为 #{ds}"

fwdsendwaitstatus = Hash.new()
fwdrecvwaitstatus = Hash.new()

fwdsendresult = []
fwdrecvresult = []

filename_date_part = "08-10"
statusdatafile = "./status/status-0810-0811.csv";
waitstatusfile = "./waitstatus/wait-0810-0811.csv";
writefiletodir = "./"

filename_date_part = ARGV[0]
statusdatafile = ARGV[1]
waitstatusfile = ARGV[2]
writefiletodir = ARGV[3]

inc_value = 0
i_write_count_of_record = 6000

puts "正在读取等待状态报告的记录..."
open(waitstatusfile).each { |x|

#puts "行长度#{x.length}"
inc_value = inc_value + 1
if ((inc_value % i_write_count_of_record) == 0)
puts "读取等待状态报告的记录 已经处理了 #{inc_value} 条 记录"
end

if (x.length > 23)#说明不是空行
arrline = x.split(",")

#arrline.each do |arrdata|
# puts "#{arrdata} "
#end
if (x[0..0] == "3")#说明是向联通送出的短消息
k = arrline[1]
fwdsendwaitstatus[k] = x
#puts "送出 #{arrline[6]} == #{x}"
end
if (x[0..0] == "4")#说明是联通送来的短消息
k = arrline[6]
fwdrecvwaitstatus[k] = x
#puts "接收 #{arrline[6]} == #{x}"
end
end
}
puts "读取等待状态报告的记录结束"

iSendDelivrd = 0
iRecvDelivrd = 0

puts "开始状态报告的比较与分类..."

inc_value = 0

open(statusdatafile).each { |x2|

#puts "行长度#{x.length}"
inc_value = inc_value + 1
if ((inc_value % i_write_count_of_record) == 0)
puts "状态报告的比较与分类 已经处理了 #{inc_value} 条 记录"
end

if (x2.length > 23)#说明不是空行
arrline2 = x2.split(",")
k = arrline2[0]

result_search = fwdsendwaitstatus[k]
if ( result_search != nil)
#puts "发现 送出 的结果 #{arrline2[1]} == #{result_search}"
if (arrline2[1] == "DELIVRD")
iSendDelivrd = iSendDelivrd + 1
end
fwdsendresult.push(arrline2[1] + "," + result_search);
fwdsendwaitstatus.delete(k)
end
if (result_search == nil)#说明
k = arrline2[0] + "\n"
result_search = fwdrecvwaitstatus[k]
if ( result_search != nil)
#puts "发现 接收 的结果 #{arrline2[1]} == #{result_search}"
if (arrline2[1] == "DELIVRD")
iRecvDelivrd = iRecvDelivrd + 1
end
fwdrecvresult.push(arrline2[1] + "," + result_search);
fwdrecvwaitstatus.delete(k)
end
end
end
}
puts "结束状态报告的比较与分类"

inc_value = 0
file_inc_value = 1

need_have_write_file = true
f_fwd_send_result = writefiletodir + "GMO2008-" + filename_date_part + "-" + ds + "-" + file_inc_value.to_s() + ".txt"
f_fwd_send_result = open(f_fwd_send_result, 'w')

fwdsendresult.each do |arrdata|
begin
need_have_write_file = true
inc_value = inc_value + 1
tmp_v = format_data(inc_value.to_s(), "00", "085101", "108511", arrdata)
#puts tmp_v
f_fwd_send_result.puts tmp_v

if ((inc_value % i_write_count_of_record) == 0)
puts "GMO 话单 已经处理了 #{inc_value} 条 联通 返回 的状态报告"
f_fwd_send_result.close
need_have_write_file = false

file_inc_value = file_inc_value + 1
f_fwd_send_result = writefiletodir + "GMO2008-" + filename_date_part + "-" + ds + "-" + file_inc_value.to_s() + ".txt"

f_fwd_send_result = open(f_fwd_send_result, 'w')
end

end
if (need_have_write_file)
#f_fwd_send_result.close
end
end

####################

inc_value = 0
file_inc_value = 1

need_have_write_file = true
f_fwd_recv_result = writefiletodir + "GMT2008-" + filename_date_part + "-" + ds + "-" + file_inc_value.to_s() + ".txt"
f_fwd_recv_result = open(f_fwd_recv_result, 'w')

fwdrecvresult.each do |arrdata|
begin
need_have_write_file = true
inc_value = inc_value + 1
tmp_v = format_data(inc_value.to_s(), "01", "085101", "108511", arrdata)
#puts tmp_v
f_fwd_recv_result.puts tmp_v

if ((inc_value % i_write_count_of_record) == 0)
puts "GMT 话单 已经处理了 #{inc_value} 条 将返回给 联通 的状态报告"
f_fwd_recv_result.close
need_have_write_file = false

file_inc_value = file_inc_value + 1
f_fwd_recv_result = writefiletodir + "GMT2008-" + filename_date_part + "-" + ds + "-" + file_inc_value.to_s() + ".txt"

f_fwd_recv_result = open(f_fwd_recv_result, 'w')
end

end
if (need_have_write_file)
#f_fwd_recv_result.close
end
end


#####################
time = Time.now

ds_end = time.strftime(date_and_time)


begin
outputfile = writefiletodir + "2008-" + filename_date_part + "-" + "处理结果.txt"

f_outputfile = open(outputfile, 'w')


puts "\n#{waitstatusfile} 处理完毕, 起始时间 #{ds_start} 结束时间 #{ds_end} 结果如下:\n\n"
puts "发送给联通成功条数 #{iSendDelivrd}\n"
puts "联通发来成功条数 #{iRecvDelivrd}\n"

f_outputfile.puts "\n#{waitstatusfile} 处理完毕, 起始时间 #{ds_start} 结束时间 #{ds_end} 结果如下:\n\n"
f_outputfile.puts "发送给联通成功条数 #{iSendDelivrd}\n"
f_outputfile.puts "联通发来成功条数 #{iRecvDelivrd}\n"

ensure
f_outputfile.close # ... and this always happens.
end




# -*- coding:gbk -*-

def format_data(inc_value, type, src_gateway, dest_gateway, first_value):
arrdata = first_value.split(",")

arrdata = first_value.split(",")
tmp_date = (arrdata[6])[10:12]
tmp_date2 = (arrdata[6])[13:15]
tmp_date3 = (arrdata[6])[16:18]

ic = tmp_date.find(":")
if (ic >= 0):
tmp_date = "0" + (arrdata[6])[10:11]
tmp_date2 = (arrdata[6])[12:14]
tmp_date3 = (arrdata[6])[15:17]

#print tmp_date + " " + tmp_date2 + " " + tmp_date3
field13_1 = "0" + (arrdata[6])[5:6] + (arrdata[6])[7:9] + tmp_date + tmp_date2
field13 = "2008" + "0" + (arrdata[6])[5:6] + (arrdata[6])[7:9] + tmp_date + tmp_date2 + tmp_date3
while len(inc_value) < 7:
inc_value = "0" + inc_value

field01 = field13_1 + "0851" + "5" + inc_value
field02 = type
field03 = " " + arrdata[3]
field04 = " " + (arrdata[4])[0:11]
field05 = "0"
field06 = (arrdata[0])[0:4]
field07 = "0"
field08 = arrdata[5]
field09 = src_gateway
field10 = " "

if (field02 == "00"):
field10 = "15 "

field11 = dest_gateway
field12 = "13800851500"
field14 = field13

result_value = field01 + "\t" + field02 + "\t" + field03 + "\t" + field04 + "\t" + field05 + "\t" + field06 + "\t" + field07 + "\t" + field08 + "\t" + field09 + "\t"+ field10 + "\t"+ field11 + "\t" + field12 + "\t" + field13 + "\t" + field14

return result_value

###################
fwdsendwaitstatus = {}
fwdrecvwaitstatus = {}

fwdsendresult = []
fwdrecvresult = []

filename_date_part = "08-10"
statusdatafile = "./status/test-status-0810-0811.csv";
waitstatusfile = "./waitstatus/test-wait-0810-0811.csv";
writefiletodir = "./test0810/"

inc_value = 0
i_write_count_of_record = 3

print "正在读取等待状态报告的记录..."

file_waitstatus = open(waitstatusfile)
try:
for x in file_waitstatus:
inc_value = inc_value + 1

if ((inc_value % i_write_count_of_record) == 0):
print "读取等待状态报告的记录 已经处理了 %d 条 记录" % (inc_value)

#print x

if (len(x) < 23):
continue

arrline = x.split(",")

if (x[0:1] == "3"): #说明是向联通送出的短消息
k = arrline[1].strip('\n')
fwdsendwaitstatus[k] = x
#print "送出 %s == %s" % (k, x)
if (x[0:1] == "4"): #说明是联通送来的短消息
k = arrline[6].strip('\n')
fwdrecvwaitstatus[k] = x
#print "接收 %s == %s" % (k, x)
print "读取等待状态报告的记录结束"


finally:
file_waitstatus.close( )


iSendDelivrd = 0
iRecvDelivrd = 0

print "开始状态报告的比较与分类..."

inc_value = 0

file_status = open(statusdatafile)
try:
for x2 in file_status:
inc_value = inc_value + 1

if ((inc_value % i_write_count_of_record) == 0):
print "读取状态报告的记录 已经处理了 %d 条 记录" % (inc_value)

if (len(x2) < 23):
continue

#print x2

arrline2 = x2.split(",")
k = arrline2[0].strip('\n')
#print k

result_search = fwdsendwaitstatus.get(k, None)
if ( result_search != None):
#print "发现 送出 的结果 %s == %s" % (k, result_search)
if (arrline2[1] == "DELIVRD"):
iSendDelivrd = iSendDelivrd + 1
fwdsendresult.append(arrline2[1] + "," + result_search);
fwdsendwaitstatus.pop(k)
else:
result_search = fwdrecvwaitstatus.get(k)
if ( result_search != None):
#print "发现 接收 的结果 %s == %s" % (arrline2[0], result_search)
if (arrline2[1] == "DELIVRD"):
iRecvDelivrd = iSendDelivrd + 1
fwdrecvresult.append(arrline2[1] + "," + result_search);
fwdrecvwaitstatus.pop(k)

print "结束状态报告的比较与分类"

finally:
file_status.close( )

#print len(fwdsendresult)

ds = "08-10"

inc_value = 0
file_inc_value = 1

need_have_write_file = True
f_fwd_send_result = writefiletodir + "GMO2008-" + filename_date_part + "-" + ds + "-" + str(file_inc_value) + ".txt"

file_object = open(f_fwd_send_result, 'w')

result_len = len(fwdsendresult)
#while (len(fwdsendresult) > 0):
for i in range(result_len):
#arrdata = fwdsendresult.pop(0)
#print i
arrdata = fwdsendresult
need_have_write_file = True
inc_value = inc_value + 1
tmp_v = format_data(str(inc_value), "00", "085101", "108511", arrdata)
#print tmp_v
#print len(fwdsendresult)
file_object.write(tmp_v+"\r\n")

if ((inc_value % i_write_count_of_record) == 0):
print "GMO 话单 已经处理了 %d 条 联通 返回 的状态报告" % (inc_value)
file_object.close()
need_have_write_file = False

file_inc_value = file_inc_value + 1
f_fwd_send_result = writefiletodir + "GMO2008-" + filename_date_part + "-" + ds + "-" + str(file_inc_value) + ".txt"
file_object = open(f_fwd_send_result, 'w')
来时一见蟠桃熟,别后三惊碧海干.
xukong
帖子: 14
注册时间: 2005-10-11 10:06

Re: LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

#6

帖子 xukong » 2008-11-06 18:04

status file


1298134301,DELIVRD,2008-8-10 0:00:00.140,1298132680,2008-8-10 23:20:10.140
1298134302,EXPIRED,2008-8-10 0:00:00.203,1298134231,2008-8-10 20:56:22.203
1298134303,EXPIRED,2008-8-10 0:00:00.316,1298135583,2008-8-10 21:02:16.316
1298134304,DELIVRD,2008-8-10 0:00:00.703,1298134434,2008-8-10 20:56:24.703
1298134305,EXPIRED,2008-8-10 0:00:00.713,1298134552,2008-8-10 20:56:25.713
1298134306,EXPIRED,2008-8-10 0:00:00.726,1298134307,2008-8-10 20:56:31.726
1298134307,DELIVRD,2008-8-10 0:00:00.816,1298134555,2008-8-10 20:56:29.816
1298134308,EXPIRED,2008-8-10 0:00:00.923,1298134664,2008-8-10 20:56:29.923
1298134309,UNDELIV,2008-8-10 0:00:00.923,1298134500,2008-8-10 20:56:31.923
8897640673418462920,DELIVRD,2008-8-10 0:00:59.000,255,2008-8-10 23:56:36.530
8897640673418463316,EXPIRED,2008-8-10 0:00:59.000,255,2008-8-11 23:57:40.173
8897640673418463466,EXPIRED,2008-8-10 0:00:59.000,255,2008-8-11 23:57:41.160
8897640673418463329,EXPIRED,2008-8-10 0:00:59.000,255,2008-8-11 23:57:41.166
8897640673418464201,DELIVRD,2008-8-10 0:00:59.000,255,2008-8-11 23:57:51.186
8897640673418463378,EXPIRED,2008-8-10 0:00:59.000,255,2008-8-11 23:57:55.640

wait-status file

4,9619737189686405046,1311858,1359582 ,140,2008-8-10 23:59:59.600,1298134301
4,9619737189686405054,1308782,1592120 ,8,2008-8-10 23:59:59.600,1298134302
4,9619737189686405057,1309850,1376512 ,18,2008-8-10 23:59:59.610,1298134303
4,9619737189686405059,1308785,1599433 ,14,2008-8-10 23:59:59.620,1298134304
4,9619737189686405063,1300788,1359571 ,30,2008-8-10 23:59:59.620,1298134305
4,9619737189686405061,1301703,1388547 ,12,2008-8-10 23:59:59.620,1298134306
4,9619737189686405065,1311630,1398553 ,28,2008-8-10 23:59:59.630,1298134307
4,9619737189686405069,1530851,1366975 ,14,2008-8-10 23:59:59.660,1298134308
4,9619737189686405067,1315805,1398481 ,140,2008-8-10 23:59:59.660,1298134309
3,8897640673418462920,1398599,1303559 ,60,2008-8-10 0:00:03.060,1
3,8897640673418463466,1388572,1311646 ,62,2008-8-10 0:00:09.480,1
3,8897640673418463329,1590264,1318513 ,12,2008-8-10 0:00:09.706,1
3,8897640673418464201,1398590,1319164 ,16,2008-8-10 0:00:09.710,1
3,8897640673418463378,1508523,1331045 ,136,2008-8-10 0:00:14.806,1

你可以参造这个格式自己生成些测试数据...来个200万行就知道了

声明: 这个只是我实际应用中的一次结果,不代表全部,但是我自己很有感受,也愿意去多花精力学习PYTHON,大家根据自己的实际使用感受来选择喜欢的语言,没有必要争论什么,自己喜欢就好,呵,呵.....
来时一见蟠桃熟,别后三惊碧海干.
头像
想入非非
帖子: 8078
注册时间: 2008-07-14 22:42
来自: Beijing
联系:

Re: LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

#7

帖子 想入非非 » 2009-07-05 17:48

似乎打开压缩文件的速度有一点慢 :em11
Ubuntu User
头像
jarryson
帖子: 4002
注册时间: 2005-08-14 19:53

Re: LINUX下运行,PYTHON编写,操作方便参照mangameeya7.4改进的图片漫画等浏览软件,多平台运行,内详

#8

帖子 jarryson » 2009-07-05 19:16

我刚准备说最好不要wx的,结果看到依赖wx的。呵呵
回复