小编And*_*ark的帖子

Python:读取文件直到一行与二进制模式中的字符串匹配

好的,所以我已经看到了其他问题,但我遇到了一个独特的问题。我必须以二进制模式打开文件才能读取它(我真的不明白为什么,但它有效)。我可以轻松地打印出文件的行没问题。但是当我尝试使用 查找特定行时re.search,我遇到了问题,因为我有一个字符串模式和字节对象。这是我到目前为止所拥有的:

input_file = open(input_file_path,  'rb',  0)

for line in input_file:
    if re.search("enum " + enum_name,  line, 0):
        print("Found it")
        print(line)
        exit()
Run Code Online (Sandbox Code Playgroud)

enum_name 是用户输入,所以我真的需要知道如何在搜索以二进制模式打开的文件时同时使用字符串和变量(或者如何以非二进制模式打开此文件,我得到了不能非二进制模式下的无缓冲文本 I/O 错误)。我已经尝试为搜索二进制文件制作我的模式,但是当我这样做时我不知道如何处理变量。

python python-3.x

5
推荐指数
1
解决办法
2670
查看次数

如何在Python中实现可选的第一个参数(重现slice()行为)

可能重复:
内置范围函数如何采用单个参数或三个参数?

Python文档slice()列出了以下方法签名:

切片(***停止*)**
切片(***开始*,停止 [ ,步骤 ])**

以下是使用不同数量的参数创建切片对象的几个示例:

>>> slice(8)
slice(None, 8, None)
>>> slice(4, 8)
slice(4, 8, None)
>>> slice(4, 8, 2)
slice(4, 8, 2)
Run Code Online (Sandbox Code Playgroud)

请注意,如果slice()使用单个参数调用,则该参数将用作stop属性(具有两个或三个参数签名的第二个参数).

由于Python中不存在函数重载,因此允许可变数量的参数的典型方法是None用作默认值,例如,重现上述行为的一次尝试将如下所示:

class myslice(object):
    def __init__(self, start, stop=None, step=None):
        if stop is None and step is None:
            # only one argument was provided, so use first argument as self.stop
            self.start = None
            self.stop = start
        else:
            self.start = start
            self.stop = stop …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
1
解决办法
1569
查看次数

Python - 函数属性或可变的默认值

假设您有一个需要维持某种状态的函数,并且根据该状态的不同行为.我知道实现这两种方法,其中状态完全由函数存储:

  1. 使用函数属性
  2. 使用可变的默认值

使用略微修改版本的Felix Klings回答另一个问题,这里有一个示例函数,可以使用,re.sub()以便只替换正则表达式的第三个匹配:

功能属性:

def replace(match):
    replace.c = getattr(replace, "c", 0) + 1
    return repl if replace.c == 3 else match.group(0)
Run Code Online (Sandbox Code Playgroud)

可变默认值:

def replace(match, c=[0]):
    c[0] += 1
    return repl if c[0] == 3 else match.group(0)
Run Code Online (Sandbox Code Playgroud)

对我来说,第一个看起来更干净,但我更常见的是第二个.哪个更好,为什么?

python

4
推荐指数
1
解决办法
1049
查看次数

在java中使用正则表达式和split方法时遇到问题

我有一个字符串列表,我需要解析名称和版本,例如一些字符串看起来像这样:

应用程序名称1.2.5
AppName 7.8.b
应用程序名称7.0

我希望有两个字符串列表,其中一个带有应用程序名称,另一个带有版本号,因此一个列表是:

应用名称
AppName
应用名称

然后另一个列表将是

1.2.5
7.8.b
3.0

我曾尝试使用空格来分割字符串,但如果名称始终位于索引0并且版本始终位于索引1中,那么这将是最简单的.所以我尝试了"\\ d"(按数字分割),但是不像我想的那样工作.任何帮助将不胜感激,并提前感谢

java regex split

2
推荐指数
1
解决办法
310
查看次数

引发异常时如何计数?

我是编程初学者,由于我现在正在做练习,所以在异常的基础知识方面遇到了一些麻烦。

练习分为两个部分:

A部分:

我需要创建一个名为 ExceptionCounter 的类,其中包含一个实例变量 num_exceptions,它从 0 开始。ExceptionCounter 还有一种方法,它采用一个参数,即一个函数(除了通常的 self 之外)。check_for_exception 调用该函数(不带参数),并在引发任何异常时递增 num_exceptions。

除了“如果引发任何异常”部分之外,我已经掌握了代码的基本内容。我正在传递一个函数,其中函数体是一个对象,对吗?因此,如果我传递的函数有错误,我该如何处理该错误以触发增量?

到目前为止,这是我的代码:

class ExceptionCounter(Exception):
    def __init__(self):
        self.num_exceptions = 0

    def check_for_exceptions(self, func):
        try:
            self.func()
        except Exception:
            self.num_exceptions += 1
Run Code Online (Sandbox Code Playgroud)

但我收到“ExceptionCounter”对象没有属性“check_for_exception”错误。有想法该怎么解决这个吗?

python

2
推荐指数
1
解决办法
7305
查看次数

转义序列无效(有效的是 \b \t \n \f \r \” \' \\ )”语法错误

print(" $$$$$$\           $$$$$\        $$$$$$\        $$\   $$\ "+newline+
      "$$  __$$\          \__$$ |      $$  __$$\       $$ |  $$ |"+newline+
      "$$ /  $$ |            $$ |      $$ /  $$ |      \$$\ $$  |"+newline+
      "$$$$$$$$ |            $$ |      $$$$$$$$ |       \$$$$  /"+newline+
      "$$  __$$ |      $$\   $$ |      $$  __$$ |       $$  $$< "+newline+
      "$$ |  $$ |      $$ |  $$ |      $$ |  $$ |      $$  /\$$\"+newline+
      "$$ |  $$ |      \$$$$$$  |      $$ |  $$ |      $$ /  $$ |"+newline+
      "\__|  \__| …
Run Code Online (Sandbox Code Playgroud)

java string variables ascii

1
推荐指数
1
解决办法
1万
查看次数

密码验证REGEX以禁止空格

  • 密码不能包含空格
  • 必须至少包含一个数字字符
  • 必须包含1个大写字母
  • 长度至少为8个字符,最多15个字符

这就是我所拥有的,除了WHITE SPACE规则之外,所有功能都可以做到。

((?=.*\d)(?=.*[A-Z]).{8,15})
Run Code Online (Sandbox Code Playgroud)

为此要添加什么?

非常感谢!语言:c#,asp:RegularExpressionValidator

c# regex validation

1
推荐指数
2
解决办法
3691
查看次数

Subprocess wait()函数似乎没有等待子进程完成

我正在尝试使用python的子进程模块运行php脚本.

proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

retCode = proc.wait

print retCode

val = float(kprocess.stdout.read())

return val
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

proc = subprocess.Popen(['php', '-f', test.php], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

val = float(kprocess.communicate()[0])

return val
Run Code Online (Sandbox Code Playgroud)

当我在python解释器中运行它时,两种方式都在本地工作,但是当我尝试在实际服务器上运行它时,我总是得到"ValueError at/empty string for float()".这让我相信这个过程在某种程度上没有被等待.我错过了什么?

编辑:我正在使用Django,所以当我使用Django运行时它似乎只会破坏.

python subprocess wait communicate

-1
推荐指数
1
解决办法
3330
查看次数

标签 统计

python ×5

java ×2

regex ×2

ascii ×1

c# ×1

communicate ×1

python-3.x ×1

split ×1

string ×1

subprocess ×1

validation ×1

variables ×1

wait ×1