Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
I';我是python新手,在循环代码方面遇到了麻烦_Python_String - Fatal编程技术网

I';我是python新手,在循环代码方面遇到了麻烦

I';我是python新手,在循环代码方面遇到了麻烦,python,string,Python,String,我试图在一组XML标记内复制文件中的节 > <tag>I want to copy the data here</tag>` >我想在这里复制数据` 请注意,我发现标记周围的数据不是有效的XML,因此我无法导入普通库,必须通过字符串比较找到它:(* 我想在文件中提取多个文本部分,因此我尝试在文件中循环查找每个部分。我只想逐行执行此操作,直到我找到如何解析不需要的文本行并创建以下代码: InputFile=open('xml_input_File.xml','

我试图在一组XML标记内复制文件中的节

> <tag>I want to copy the data here</tag>`
>我想在这里复制数据`
  • 请注意,我发现标记周围的数据不是有效的XML,因此我无法导入普通库,必须通过字符串比较找到它:(*
我想在文件中提取多个文本部分,因此我尝试在文件中循环查找每个部分。我只想逐行执行此操作,直到我找到如何解析不需要的文本行并创建以下代码:

InputFile=open('xml_input_File.xml','r')
OutputFile=open('xml_output_file.xml', 'w')
check = 0

for line in InputFile.readlines():
      if line.find("<STARTTAG>"):
          check = 1
      elif line.find(r"<//STARTTAG>"):
          check = 0
      if check == 1:
          OutputFile.write(line)
InputFile=open('xml\u input\u File.xml','r')
OutputFile=open('xml\u output\u file.xml','w')
检查=0
对于InputFile.readlines()中的行:
如果行。查找(“”):
检查=1
elif行。查找(r“”):
检查=0
如果检查==1:
OutputFile.write(行)
我遇到的问题是,它只是复制整个文件,而不仅仅是我想要的部分

我知道代码不是很漂亮,但我仍在学习,这将是一个“哦!”的时刻,但谢谢你的帮助


干杯

您的代码有一些问题:

  • 如果输入的格式真的是
    “…”
    ,那么捕获行不会减少它,因为您至少要获取
    实例
  • 您使用的是文字字符串前缀(
    r”“
    ),但您使用的是两个正斜杠。从上面的示例来看,结束标记似乎只有一个正斜杠。我不确定您为什么需要在这里使用文字字符串前缀。如果这不正确,这可能就是为什么check变量从未设置为0的原因(因此,代码复制整个文件)
编辑:其他海报关于find()返回值的观点也非常有效。在关键字中使用
,可能是更好的选择

您需要手动(通过split()或通过一些正则表达式)拆分输入(解析)。或者,您可以尝试将输入整理成兼容的XML格式,然后使用许多免费提供的库中的一个来处理这类事情

希望这有帮助

Help on method_descriptor:

find(...)
    S.find(sub[, start[, end]]) -> int

    Return the lowest index in S where substring sub is found,
    such that sub is contained within s[start:end].  Optional
    arguments start and end are interpreted as in slice notation.

    Return -1 on failure.
-1也是一个
True

尝试:

如果行中有“”:
等等


另外,正斜杠不需要转义(在原始字符串中更不用转义!)。

find返回行中子字符串的索引。可能starttag位于行的开头(索引为零),因此if不能正常工作

尝试:

if line.find(“”)=-1:
甚至更好

if "<starttag>" in line:
如果行中有“”:
或者使用一些python的XML解析器。

你真的有
标记吗?我想你对python字符串中的转义字符感到困惑。它不是正斜杠。另外,
str.find
在没有找到任何内容时返回
-1
,否则返回指针的位置。你似乎没有测试正确的条件.
if line.find("<STARTTAG>") != -1:
if "<starttag>" in line: