【问题标题】:How reading file in 'utf-8'如何在“utf-8”中读取文件
【发布时间】:2026-02-08 07:00:01
【问题描述】:

我有一个 txt 文件,每一行都包含一个姓氏,一些姓氏有一个特殊的字母 'Ñ'

Apellidos200.txt

 Ramos      
 Rios       
 Arias      
 Muñoz

为了解析和读取这个文件,我使用了这段代码。

apellidos_list = list()
with io.open('Apellidos200.txt',encoding='utf-8') as fp:
     for line in fp:
         x = line.replace('\t','')
         x = x.replace('\'', '')# I try this
         x = x.replace('\n','')
         x = x.replace('\r','')
         x = x.replace('\\','')
         x = x.replace('"','') # And try this
         apellidos_list.append(repr(x))

输出:

     'Ramos'        
     'Rios'     
     'Arias'        
     'Muñoz'

问题是字符串是用我无法删除的简单引号传递的,我猜这是'utf-8'中的编码

我使用这个字符串来连接并创建一个 url 例如 example.com/Ramos,但是用这个简单的引号它仍然存在,这种方式 -> example.com/'Ramos' 当我使用“请求”时这会导致错误.get'

编辑: 添加带有代码调试的图像。 Image of debug

【问题讨论】:

  • 那么不要使用repr()。你为什么首先添加它?
  • 明确一点:这与读取数据无关;您使用repr()添加引号。
  • 我在您的输入数据中看不到任何反斜杠。剩余的str.replace() 调用都可以替换为单个str.strip() 调用。您可以将整个循环替换为apellidos_list = [line.strip() for line in fp]
  • 感谢您的回复@MartijnPieters,我看到了此回复的这种方式(repr)[链接](*.com/a/147756/5280246)。但是,我删除了repr,但问题是在那之前,当for循环开始时。
  • @MartijnPieters,我在调试时添加了一个屏幕截图,如您所见,我删除了反斜杠,因为它们出现在开头。

标签: python utf-8 encode


【解决方案1】:

您正在存储字符串的表示repr() 是一个调试工具,它输出一个有效的 Python 表达式来重现你的字符串。因此,您会得到一个包含有效 Python 字符串文字的字符串,其中任何不可打印的非 ASCII 字符都替换为转义序列(始终以 \ 开头,后跟单个字符,或 x 加上 2 个十六进制字符,@ 987654325@ 有 4 个十六进制字符或 U 有 8 个,具体取决于代码点)。

不要使用repr()。您所拥有的只是带有一些空格(制表符和换行符)的字符串,因此您只需要 str.strip()

apellidos_list = []
with io.open('Apellidos200.txt',encoding='utf-8') as fp:
    for line in fp:
        apellidos_list.append(line.strip())

或使用列表推导:

with io.open('Apellidos200.txt',encoding='utf-8') as fp:
    apellidos_list = [line.strip() for line in fp]

【讨论】: