【问题标题】:No new line character after reading a file and storing result in a string读取文件并将结果存储在字符串中后没有换行符
【发布时间】:2016-01-12 22:38:21
【问题描述】:

在我从文件中读取并将结果存储到字符串后,有没有办法检测换行符?代码如下:

with open("text.txt") as file:
    content_string = file.read()
    file.close()

re.search("\n", content_string)

content_string 如下所示:

Hello world!
Hello WORLD!!!!!

我想提取第一行“Hello world!”之后的换行符。这个角色当时还存在吗?

【问题讨论】:

  • re.search 行检测换行符,不是吗?你只是不对结果任何事情。
  • content_string.endswith('\n')
  • 如果我有更多行,我想检测第一个换行符怎么办?出于某种原因,在我的文本中它不会检测到它。

标签: python regex string newline


【解决方案1】:

根据 Jongware 的评论,您执行的正则表达式搜索会找到换行符。您只需要使用该结果即可。

来自re module documentation

re.search(pattern, string, flags=0)

扫描字符串寻找第一个位置 表达式模式产生一个匹配,并返回一个对应的 匹配对象实例。如果字符串中没有位置匹配,则返回 None 图案;请注意,这与查找零长度不同 匹配字符串中的某个点。

在代码方面,检查转化为:

with open("text.txt") as file:
    content_string = file.read()
    file.close()

m = re.search("\n", content_string)
if m:
    print "Found a newline"
else:
    print "No newline found"

现在,您的文件很可能包含“\r”而不是“\n”:它们的打印结果可能相同,但正则表达式不匹配。在这种情况下,也试试这个测试,替换代码中的正确行:

m = re.search("\n", content_string)

与:

m = re.search("[\r\n]", content_string)

哪个会寻找。

【讨论】:

  • 我实际上编辑了我的问题,请在最后一部分。
  • 你要求找到一个换行符:如果字符串中有一个,正则表达式会找到它,不管是第一个还是最后一个或多个。您想要执行的匹配的任何变化,都可以通过充分更新您在 re.search() 语句中的正则表达式模式来完成。
  • @KidSudi:我更新了解决方案:您的文件中可能有 \r 而不是 \n。测试这个解决方案。
【解决方案2】:

有没有办法在我读完后检测换行符 文件并将结果存储到字符串中?

如果我理解正确,您想将多行连接成一个字符串。 输入:

Hello world!
Hello WORLD!!!!!

test.py:

result = []
with open("text.txt", "rb") as inputs:
    for line in inputs:
        result.append(line.strip())  # strip() removes newline charactor

print " ".join([x for x in result])

输出:

Hello world! Hello WORLD!!!!!

【讨论】:

    【解决方案3】:

    如果我有更多行,我想检测第一行怎么样 新队?出于某种原因,在我的文本中它不会检测到它。

    with open("text.txt") as f:
        first_line = f.readline()
        print(first_line)
    

    【讨论】:

      猜你喜欢
      • 2018-08-22
      • 2021-08-27
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      相关资源
      最近更新 更多