Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.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
Can';在python中无法获取单\_Python - Fatal编程技术网

Can';在python中无法获取单\

Can';在python中无法获取单\,python,Python,我正在尝试学习python,而且我对它还很陌生,我无法理解这一部分。 基本上,我现在所做的是从一个网页的源代码中取出所有不是文字的东西 网页有很多\n和\t,我想要一些可以找到并删除它和下一个“”之间的所有内容的内容 def removebackslash(source): while(source.find('\') != -1): startback = source.find('\') endback = source[startback:].fin

我正在尝试学习python,而且我对它还很陌生,我无法理解这一部分。 基本上,我现在所做的是从一个网页的源代码中取出所有不是文字的东西

网页有很多\n和\t,我想要一些可以找到并删除它和下一个“”之间的所有内容的内容

def removebackslash(source):
    while(source.find('\') != -1):
        startback = source.find('\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source

这就是我所拥有的。它不是这样工作的,因为
\'
不会关闭字符串,但是当我将
\
更改为
\
时,它会将字符串解释为
\
。我无法理解在
'\'处解释的任何内容。

\
是转义字符;它要么赋予字符一个特殊的意义,要么剥夺了字符的特殊意义。现在,它正在转义结束单引号,并将其视为字面单引号。您需要将其自身转义以插入文字反斜杠:

def removebackslash(source):
    while(source.find('\\') != -1):
        startback = source.find('\\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source
>>> x = "\\"
>>> x
u'\\'
>>> print x
\
>>> len(x)
1
def removebackslash(源代码):
while(source.find('\\')!=-1):
startback=source.find(“\\”)
endback=source[startback:]查找('')+startback+1
source=源[0:startback]+源[endback:]

返回源
SO自动格式显示您的问题。由于
\
用于转义字符,因此它将转义结尾引号。尝试将该行更改为(注意使用双引号):

阅读有关转义字符的详细信息

尝试使用替换:

str.replace(old, new[, count])
返回一个字符串的副本,其中所有出现的子字符串old都替换为new。如果给定了可选参数计数,则仅替换第一次出现的计数

因此,在你的情况下:

my_text = my_text.replace('\n', '')
my_text = my_text.replace('\t', '')

正如其他人所说,您需要使用
'\\'
。你认为这不起作用的原因是,当你得到结果时,它们看起来像是从两个反斜杠开始的。但它们不是以两个反斜杠开始的,只是Python显示了两个反斜杠。如果没有,则无法区分换行符(表示为
\n
)和后跟字母n的反斜杠(表示为
\\n
)之间的区别

有两种方法可以让你自己相信到底发生了什么。一种是在结果上使用print,这会导致它扩展转义:

>>> x = "here is a backslash \\ and here comes a newline \n this is on the next line"
>>> x
u'here is a backslash \\ and here comes a newline \n this is on the next line'
>>> print x
here is a backslash \ and here comes a newline 
 this is on the next line
>>> startback = x.find('\\')
>>> x[startback:]
u'\\ and here comes a newline \n this is on the next line'
>>> print x[startback:]
\ and here comes a newline 
 this is on the next line
另一种方法是使用
len
验证字符串的长度:

>>> x = "Backslash \\ !"
>>> startback = x.find('\\')
>>> x[startback:]
u'\\ !'
>>> print x[startback:]
\ !
>>> len(x[startback:])
3
请注意
len(x[startback:])
是3。字符串包含三个字符:反斜杠、空格和感叹号。只需查看仅包含反斜杠的字符串,您就可以更简单地看到发生了什么:

def removebackslash(source):
    while(source.find('\\') != -1):
        startback = source.find('\\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source
>>> x = "\\"
>>> x
u'\\'
>>> print x
\
>>> len(x)
1
x
在交互式提示下求值时,它看起来只以两个反斜杠开始(或者使用它的
\uuuu repr\uu
方法)。当您实际打印它时,您可以看到它只有一个反斜杠,当您查看它的长度时,您可以看到它只有一个字符长


因此,这意味着您需要在
查找中转义反斜杠,并且您需要认识到输出中显示的反斜杠也可能会加倍。

我想还没有人提到过这一点,但是如果您不想处理转义字符的问题,请使用原始字符串

source.find(r'\')

在字符串之前添加字母r告诉Python不要解释任何特殊字符,并保持字符串与您键入的字符完全一致。

这是因为反斜杠应该转义。如下所示:
source.find('\\')
。您认为\n是两个字符。它们不是,只有一个,因此不能跳过\n和n或r之间的所有内容,因为它们必须是2个字符。顺便说一句,请注意代码高亮显示。在这种情况下,这是错误的,因为你的来源是错误的。像这样的二级指标有助于在不浪费太多时间的情况下查找bug。这是我在所有地方都读到的内容,但当我进行此更改时,会在源代码中搜索“\\”。我确实尝试过。然后我甚至在函数之外做了这件事,看看问题是否出在其他地方。当我打印源[source.find('\\'):]时,它以\\开头。每一次。“blahblahblah\andstuff”.find(“\\”)对我的计算结果为-1。@fnsjdnfksjdb:
“blahblahblah\andstuff.”find(“\\”)
的计算结果应为-1。“blahblahblah\andstuff”中没有一个反斜杠:只有一个字符“\a”(chr(7))<代码>“blahblahblah\\andstuff”。另一方面,find(\\”
)是12。但它仍然会转义字符串的结尾。