找回密码
 立即注册
搜索
查看: 3204|回复: 35

[软件] #

[复制链接]
发表于 2018-12-3 20:55 | 显示全部楼层 |阅读模式
本帖最后由 柳向城 于 2021-1-28 11:25 编辑

#
回复

使用道具 举报

发表于 2018-12-3 23:30 | 显示全部楼层
干这个我选择grep再sed,

或者vim打开,先查找X1,然后用类似

%s/X1-01/A1-01/g

的命令,几分钟完事……
回复

使用道具 举报

     
发表于 2018-12-4 08:08 来自手机 | 显示全部楼层
正则表达式?

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.0.4
回复

使用道具 举报

     
发表于 2018-12-4 09:16 来自手机 | 显示全部楼层
文件内容批量修改?
好压自带工具里面有个批量文件名修改我觉得还行

—— 来自 Xiaomi Mi-4c, Android 7.0上的 S1Next-鹅版 v2.0.4
回复

使用道具 举报

头像被屏蔽
     
发表于 2018-12-4 09:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2018-12-4 10:26 | 显示全部楼层
我建议先学会怎么贴代码。这代码贴的,看都不想看。
回复

使用道具 举报

     
发表于 2018-12-4 12:33 来自手机 | 显示全部楼层
没什么意义。Linux命令rename自带正则匹配替换。Windows重命名的专门软件也能完成批量改名(重点是能够预览后再应用,避免发生意外问题噢)。
回复

使用道具 举报

 楼主| 发表于 2018-12-4 12:51 | 显示全部楼层
threefcata 发表于 2018-12-3 23:30
干这个我选择grep再sed,

或者vim打开,先查找X1,然后用类似

sed也能实现条件判断吗?文件中有“X1定义”,那1234=A,有X2定义,那么1234=B
回复

使用道具 举报

 楼主| 发表于 2018-12-4 12:53 | 显示全部楼层
pyjq 发表于 2018-12-4 10:26
我建议先学会怎么贴代码。这代码贴的,看都不想看。

贴代码之后,'&#xe7a6' 会显示是方框
回复

使用道具 举报

 楼主| 发表于 2018-12-4 13:21 | 显示全部楼层
lvcha 发表于 2018-12-4 09:54
py是屁眼的意思么。。

你是故意的吧
回复

使用道具 举报

 楼主| 发表于 2018-12-4 13:24 | 显示全部楼层
RAMDA 发表于 2018-12-4 08:08
正则表达式?

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.0.4

没有使用正则表达式,只是条件替换
回复

使用道具 举报

 楼主| 发表于 2018-12-4 13:24 | 显示全部楼层
NMTor 发表于 2018-12-4 09:16
文件内容批量修改?
好压自带工具里面有个批量文件名修改我觉得还行

文件内容
回复

使用道具 举报

     
发表于 2018-12-4 13:28 来自手机 | 显示全部楼层
柳向城 发表于 2018-12-4 12:53
贴代码之后,'&#xe7a6' 会显示是方框

&#x开头的字符是什么

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.0.4
回复

使用道具 举报

     
发表于 2018-12-4 13:47 | 显示全部楼层
提几点建议,不知道楼主学代码学了多久。
1. 变量尽量做到有意义,简洁明了。有助于后面维护,不管是本人维护还是其他人维护。像f1这种变量名,可以换成打开的文件名。另外不要用拼音命名,用英文。不会英文就用网络翻译。
2. 看lz又是open,又是close,应该还不知道Python的with表达式。可以查查,有助于代码的简洁。
回复

使用道具 举报

发表于 2018-12-4 13:49 | 显示全部楼层
本帖最后由 乔槁 于 2018-12-4 13:56 编辑

论坛可以贴代码:
  1. package main

  2. import "fmt"

  3. func main() {
  4.     fmt.Println("Hello, 世界")
  5. }
复制代码
回复

使用道具 举报

     
发表于 2018-12-4 14:00 | 显示全部楼层
sed -ri 's/A1-0/X1-0/g'
sed -ri 's/B1-0/X1-0/g'
sed -ri 's/C1-0/X1-0/g'
....
查找替换直接用sed就可以了
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:00 | 显示全部楼层
win8 发表于 2018-12-4 12:33
没什么意义。Linux命令rename自带正则匹配替换。Windows重命名的专门软件也能完成批量改名(重点是能够预览 ...

没什么意义的事多了。

我已经发现用py查找使用的地方了

例如S1的服务器每次挂了,nginx日志会错误记录。
可以使用py每5分钟查找日志内容,有错误信息,就发个邮件提醒。
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:00 | 显示全部楼层
本帖最后由 柳向城 于 2018-12-4 14:03 编辑
pyjq 发表于 2018-12-4 13:47
提几点建议,不知道楼主学代码学了多久。
1. 变量尽量做到有意义,简洁明了。有助于后面维护,不管是本人维 ...

第一次写,上面第一打开文件用的with。后面要写入文件,就没用with。
回复

使用道具 举报

     
发表于 2018-12-4 14:13 来自手机 | 显示全部楼层
柳向城 发表于 2018-12-4 14:00
没什么意义的事多了。

我已经发现用py查找使用的地方了

他的意思大概是你的做法复杂得没有意义

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.0.4
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:14 | 显示全部楼层
baka9 发表于 2018-12-4 14:00
sed -ri 's/A1-0/X1-0/g'
sed -ri 's/B1-0/X1-0/g'
sed -ri 's/C1-0/X1-0/g'

可能我表达有问题

打开一个文件,如果出现了X1
1234=A
sed -ri 's/1234/A/g'


如果出现了X2
1234=B
sed -ri 's/1234/B/g'

sed能加判断吗?
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:15 | 显示全部楼层
乔槁 发表于 2018-12-4 13:49
论坛可以贴代码:

看到方框没有?


  1. import codecs                                                  #载入模块
  2. import re                                                      #载入模块
  3. import os                                                      #载入模块
  4. for htmlfile1 in (os.listdir("AQ")):                            #统计目录文件
  5.         htmlfile='AQ/{htmlfile2}'.format(htmlfile2=htmlfile1)       #获取文件名变量
  6.         htmlfileok='AQ2/{htmlfile2}'.format(htmlfile2=htmlfile1)    #处理后文件名变量
  7.         with codecs.open(htmlfile, 'r+', 'utf-8') as f:             #打开文件
  8.                 htmlsource = f.read()                                    #提取文件
  9.                
  10.         chazhaojerry0 = r'class="jerry0"'                             #查找条件判断内容0
  11.         chazhaojieguo0  = len(re.findall(chazhaojerry0,htmlsource))   #查找结果0

  12.         chazhaojerry1 = r'class="jerry1"'                             #查找条件判断内容1
  13.         chazhaojieguo1  = len(re.findall(chazhaojerry1,htmlsource))   #查找结果1



  14.         if chazhaojieguo0 > 0:
  15.                 #print('找到目标jerry0')
  16.                 f = codecs.open(htmlfile,'r+','utf-8')                          #打开源文件
  17.                 f2 = codecs.open(htmlfileok,'w','utf-8')                        #新建目标文件
  18.                 for s1 in f.readlines():                                        #循环打开行并赋值给S4
  19.                         questions1 = ['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','']                                             #编码方式4
  20.                         answers1 = ['I','J','0','x','P','X','Y','U','M','N','Z','7','A','B','C','D','O','9','G','E','F','R','K','H','2','L','Q','8','3','4','S','W','V','6','1','T','5','e','f','g','h','i','j','k','n','l','m','Z','y','V','p','o','d','q','t','c','W','a','r','s','u','b']                                               #编码方式4对应字符4
  21.                         for q1, a1 in zip(questions1, answers1):                    #循环所有编码
  22.                                 s1=(s1.replace(q1,a1))                                  #替换编码为对应字符
  23.                                 
  24.                         f2.write(s1)                                                #写入替换结果
  25.                 f.close()                                                       #关闭源文件
  26.                 f2.close()                                                      #关闭目标文件
  27.                                                 

  28.         elif chazhaojieguo1 > 0:
  29.                 #print('找到目标jerry1')
  30.                 f = codecs.open(htmlfile,'r+','utf-8')                          #打开源文件
  31.                 f2 = codecs.open(htmlfileok,'w','utf-8')                        #新建目标文件
  32.                 for s2 in f.readlines():                                        #循环打开行并赋值给S4
  33.                         questions2 = ['','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','']                                             #编码方式4
  34.                         answers2 = ['1','0','Q','Y','8','I','9','Z','G','n','l','S','O','c','N','t','E','5','T','k','y','o','2','j','z','B','m','h','M','L','w','i','q','K','R','F','b','U','7','D','f','g','p','d','P','W','v','C','3','H','A','x','r','6','u','V','X','a','J','4','s','e']                                               #编码方式4对应字符4
  35.                         for q2, a2 in zip(questions2, answers2):                    #循环所有编码
  36.                                 s2=(s2.replace(q2,a2))                                  #替换编码为对应字符
  37.                                 
  38.                         f2.write(s2)                                                #写入替换结果
  39.                 f.close()                                                       #关闭源文件
  40.                 f2.close()                                                      #关闭目标文件               
  41.                

  42.         else:
  43.                 print('没有找到目标')

复制代码


回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:18 | 显示全部楼层
RAMDA 发表于 2018-12-4 13:28
&#x开头的字符是什么

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.0.4 ...

人家自定义的编码,用来重新定义A-Z
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:20 | 显示全部楼层
RAMDA 发表于 2018-12-4 14:13
他的意思大概是你的做法复杂得没有意义

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.0.4 ...

人笨没办法,只想到这个解决方法。
回复

使用道具 举报

     
发表于 2018-12-4 14:26 | 显示全部楼层
柳向城 发表于 2018-12-4 14:14
可能我表达有问题

打开一个文件,如果出现了X1

X1/X2在哪?和1234有啥关系?
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:33 | 显示全部楼层
baka9 发表于 2018-12-4 14:26
X1/X2在哪?和1234有啥关系?

X1 X2是不同的编码表
X1是1编码表,1234=A,5678=Y
X2是2编码表,1234=B,5678=H
回复

使用道具 举报

     
发表于 2018-12-4 14:45 | 显示全部楼层
柳向城 发表于 2018-12-4 14:14
可能我表达有问题

打开一个文件,如果出现了X1

判断可以靠正则

经常搞字符串处理的要好好学正则,一招鲜
回复

使用道具 举报

     
发表于 2018-12-4 14:52 | 显示全部楼层
本帖最后由 黑暗之凰 于 2018-12-4 15:10 编辑

还有建议类似数据表的内容提出来
用字典重写if else 有利于后续扩展
提取查找和转换相关独立成为函数,现有逻辑文件打开关闭2次,浪费
替换部分也是巨大的浪费, 不应该直接用replace
比如

  1. def decode_html(file_name, target_file_name, match_table):
  2.     with codecs.open(file_name, 'r+', 'utf-8') as f:
  3.            htmlsource= f.read()           
复制代码



随手写一下, 楼下的优化吧

我靠s1的 code有毒 贴进来编辑都丢了,不写了,再见
回复

使用道具 举报

 楼主| 发表于 2018-12-4 14:55 | 显示全部楼层
モナド 发表于 2018-12-4 14:45
判断可以靠正则

经常搞字符串处理的要好好学正则,一招鲜

查找的源是固定的,1234
替换目标却不固定,1234有时等于A,1234有时等于B

判断式怎么写?
回复

使用道具 举报

     
发表于 2018-12-4 15:00 | 显示全部楼层
柳向城 发表于 2018-12-4 14:55
查找的源是固定的,1234
替换目标却不固定,1234有时等于A,1234有时等于B

匹配第一种模式的不会匹配第二种,写两句替换各执行一次
回复

使用道具 举报

     
发表于 2018-12-4 15:01 来自手机 | 显示全部楼层
柳向城 发表于 2018-12-4 14:33
X1 X2是不同的编码表
X1是1编码表,1234=A,5678=Y
X2是2编码表,1234=B,5678=H

看了下你写的py,大概明白了

就像1L说的,先grep第一个条件输出file1再grep第二个条件输出file2,然后在两个文件里分别sed

回复

使用道具 举报

 楼主| 发表于 2018-12-4 15:09 | 显示全部楼层
黑暗之凰 发表于 2018-12-4 14:52
还有建议类似数据表的内容提出来
用字典重写if else 有利于后续扩展
提取查找和转换相关独立成为函数,现有 ...

看来,要学的东西还很多
回复

使用道具 举报

发表于 2018-12-4 15:17 | 显示全部楼层
柳向城 发表于 2018-12-4 12:51
sed也能实现条件判断吗?文件中有“X1定义”,那1234=A,有X2定义,那么1234=B ...

所以我说先grep呀,grep的退出状态应该能表示找没找到的,放在bash的什么if里就行了
回复

使用道具 举报

     
发表于 2018-12-4 15:23 | 显示全部楼层
LZ一直在提 X-Y 问题
回复

使用道具 举报

 楼主| 发表于 2018-12-4 15:25 | 显示全部楼层
baka9 发表于 2018-12-4 15:01
看了下你写的py,大概明白了

就像1L说的,先grep第一个条件输出file1再grep第二个条件输出file2,然后在 ...

sh要怎么写?
回复

使用道具 举报

     
发表于 2018-12-5 00:29 | 显示全部楼层
你这个qa的映射数组看的我精神崩溃 ,难道不是写个配置表再套正则比较快么
回复

使用道具 举报

头像被屏蔽
     
发表于 2018-12-5 10:08 来自手机 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-8-10 03:23 , Processed in 0.199824 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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