Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python附加字符丢失_Python_Syntax - Fatal编程技术网

Python附加字符丢失

Python附加字符丢失,python,syntax,Python,Syntax,嘿,我对python还很陌生,我正在编写一个脚本来对文件中的一些关键字进行排序,除了一个我不懂的小的阅读/打印错误之外,一切都很好。。。这是我的问题代码和我正在扫描的文件: File: SEND TEST Tester -> 1FFF 19 02 0F :\user\log SEND TEST Tester -> 1FFF 18 00 0F [Channel 1] :\user\log SEND TEST Tester -> 1F

嘿,我对python还很陌生,我正在编写一个脚本来对文件中的一些关键字进行排序,除了一个我不懂的小的阅读/打印错误之外,一切都很好。。。这是我的问题代码和我正在扫描的文件:

File:
    SEND TEST
    Tester -> 1FFF 19 02 0F :\user\log
    SEND TEST
    Tester -> 1FFF 18 00 0F [Channel 1] :\user\log
    SEND TEST
    Tester -> 1FFF 12 11 5F :\user\log
    SEND TEST
    Tester -> 1FFF 12 55 1F [Channel 1] :\user\log
    SEND TEST
    Tester -> 1FFF 19 03 2F :\user\log
code:
      if line.startswith('Tester ->'):
         start = 'Tester -> '  # take string from
         end = ':\ ' # end at
         data.append(line[line.find(start) + 9 :line.find(end)].strip('[Channel 1]'))
这张照片

1FFF 19 02 0F
1FFF 18 00 0F [Channel 1]
1FFF 12 11 5F
1FFF 12 55 1F [Channel 1]
1FFF 19 03 2F 
data.append
字符串有问题,如我工作的打印中所示,但我想提取代码ex
1FFF 12 55 1F
,而不是
[Channel 1]
。。。所以我用了.strip来删除它,但是我得到了这个打印:

1FFF 19 02 0F
FFF 18 00 0F
1FFF 12 11 5F
FFF 12 55 1F
1FFF 19 03 2F 
所有具有
[Channel 1]
的字符串都会丢失第一个字符,如果我在
数据中放置
8而不是
9
。apped
会打印:

1FFF 19 02 0F
> 1FFF 18 00 0F
1FFF 12 11 5F
> 1FFF 12 55 1F
1FFF 19 03 2F
然后它从
测试仪->
获取
,我不明白为什么?出于某种原因,它跳过了中间的角色?这就像当我有一个
9
时,它统计每个字符,包括空格,当我有一个
8
时,它统计字符,但不包括空格。。。这怎么可能?有人知道如何解决这个问题,谢谢

# Sending Request: Tester -> 1631 11 33 F5 :\ APP_3130 \ Read Identifier \ 
Tester -> 1631 22 F1 2E :\ APP_3138 \ Read Identifier \ 
Tester -> 1FFF 19 02 0F [Channel 1]

问题是
strip('chars')
删除了
'chars'
的所有组合,如下所述:

所以你真正想说的是从我的字符串中删除字符
[,C,h,a,n,e,l,1和]

如果您只想删除
[Channel 1]
,我将执行以下操作:

import re

line = re.sub(r"\[Channel 1\]$", "", line)
import re

pattern = re.compile(r"Tester ->\s((?:(?:\w+)+\s)+)(?:\[Channel \d\])?\s?[:]")
if line.startswith('Tester ->'):
    m = pattern.match(line)
    if m is not None:
        data.append(m.group(1).strip())
此正则表达式模式仅与作为行尾的文本相匹配

或者,如果不想包含regex模块,可以使用

line = line.replace("[Channel 1]", "")
此解决方案将取代
[Channel 1]
,无论它显示在线路的何处

=================

这里最好的解决方案是使用正则表达式并跳过整个
start
end
过程。您可以执行以下操作:

import re

line = re.sub(r"\[Channel 1\]$", "", line)
import re

pattern = re.compile(r"Tester ->\s((?:(?:\w+)+\s)+)(?:\[Channel \d\])?\s?[:]")
if line.startswith('Tester ->'):
    m = pattern.match(line)
    if m is not None:
        data.append(m.group(1).strip())

这是一个使用正则表达式的版本:

import re

rgx = re.compile('Tester\ ->\ ([0-9a-fA-F\ ]{13})')

for line in file:
    match = rgx.match(line)
    if match:
        data.append(match.group(1))

print(data)
# ['1FFF 19 02 0F', '1FFF 18 00 0F', '1FFF 12 11 5F', 
#  '1FFF 12 55 1F', '1FFF 19 03 2F']
正则表达式匹配字符串
'Tester->'
,后跟一个包含十六进制字符或空格的长度为13的字符串


这是假设您每行迭代文件行。

我不是python程序员,但看起来您的结束分隔符是可变的:和[将表示字符串的结尾。我认为您应该查找其中一个,而不是在事实发生后试图去掉多余的字符。您应该阅读。我可以建议,但由于您是新手,这可能是太多的信息-因此如果您知道要查找的字符串的长度,您不会
line[line.find(start)+9:line.find(开始)+9+14]
玩这个把戏吗?你可以建议使用
replace(“[Channel 1]”,“)
相反,你会得到我的支持票。@Jean-FrançoisFabre haha我刚刚编辑了它,如果你建议使用正则表达式,你最好使用
re.match
重写一个解决方案。毕竟,这就是搜索文本的意义。@Kendas你为什么要使用匹配从字符串中删除一个内容呢?这是一个很大的额外开销。挑剔:既然你提出了
re
,为什么不添加
$
,因为最终的模式似乎是这样的:这比
str.replace
要好。