【问题标题】:Python Automatically ignore unicode stringPython自动忽略unicode字符串
【发布时间】:2017-06-12 01:48:30
【问题描述】:

我一直在寻找自动导入一些文件的方法,但由于我使用的是 Windows,所以我遇到了 unicode 错误(因为“C:\Users\...”)。 我一直在寻找更正此错误并找到一些提示(使用 r"MyString" 或 u"MyString" 用于原始和 unicode 字符串),我已被定向到此页面(https://docs.python.org/3/howto/unicode.html)。

但是由于我的问题是关于自动导入某些文件的 GUI 界面,所以我还没有想出办法。

我会在这里给你我的提示:

 file = file.replace('\\', '//')

 file = r"MyFilePath" 

 file = u"MyFilePath" 

 file = os.path.abspath("MyFilePath") 

 file = "MyFilePath".decode('latin1')
 """ isn't correct because a string has no attribute 'decode' of course """ 

这两个中的一个似乎不错,但我不知道如何让 python 明白我想复制 ru 后面的路径。

或者有没有办法告诉Python:

file = StopThinkingWithUnicode("MyFilePath")

我也看到了这个链接(Deal with unicode usernames in python mkdtemp),但也不起作用(我已经更正了 print() 函数,因为 Python2.7 写入并且我在 3.5 上)

我忘记发布回溯所以它就在那里:

  MyFilePath = "C:\Users\MyUser\Desktop\Projet\05_Statistiques\Data\MyFileName.xlsx"
  File "<ipython-input-13-d8c2e72a6d3f>", line 1
  MyFilePath = "C:\Users\MyUser\Desktop\Projet\05_Statistiques\Data\MyFileName.xlsx"
            ^
  SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

有人可以帮我一些提示或链接吗? 感谢您的帮助。

PS:我尝试在脚本的第一行设置:

 # -*- coding: latin-1 -*- 

(我有 *.xl、*.csv、*.sas7bdat、*.txt 文件)

【问题讨论】:

  • 只需使用 / 或 \\ 而不是 \
  • 用户不应该这样做,这是@JayParikh 的主要问题之一

标签: python windows user-interface unicode python-3.5


【解决方案1】:

这是 Windows 路径的一个非常常见的问题。我怀疑人们偶然发现了它,并通过放置与转义序列匹配的“烦人”小写字母(\n,\t,\b,\a,\v,\x .. .) 大写。它可以工作,除了\U(这是unicode转义序列)和\N

真正的解决方案是使用 raw 前缀来处理反斜杠:

MyFilePath = r"C:\Users\MyUser\Desktop\Projet\05_Statistiques\Data\MyFileName.xlsx"
             ^

编辑:我关于“用大写字母避免错误的理论证实了。检查这个问题中的路径:Largest number of rows in a csv python can handle?

【讨论】:

  • 你知道一种 concat r + "MyFilePath" 的排序方法吗(MyFilePath 实际上是由用户使用资源管理器选择的)? (而不是像我在这里所做的那样键入但我 - 抱歉,如果不清楚)我尝试使用 ''.join(["r" + MyFilePath]) 但由于 Unicode 错误,MyFilePath 未处理
  • 没关系发现 tkinter 可以返回文件的路径并自动将“\”转换为“/”(如果有人正在寻找它,stackoverflow.com/questions/3579568/…)谢谢@jean-françois Fabre
  • @StevenS。原始字符串用于在源代码中创建字符串常量。如果您的用户从 GUI 输入文件名,则该字符串将是正确的。您的问题可能与加入字符串有关。展示一个示例,说明您实际上尝试做什么,而不是不代表用户正在做什么的模糊硬编码示例。
  • @StevenS.,没有理由在 Windows 路径中用斜杠替换反斜杠,这可能会导致问题,因为在某些情况下路径必须使用反斜杠.因此相反,您应该使用os.path.normpath确保 路径只使用反斜杠。此外,您对 Windows 上的 Unicode 的厌恶似乎是受虐狂。 ANSI/OEM 代码页是基于 DOS 的 Windows 的一个已弃用的遗留系统——最后一次发布为大约 2000 年的 Windows ME。Windows XP 及更高版本基于 NT,一个 Unicode 平台。
  • 请注意,使用原始字符串的建议不是 Python 2 中 Unicode 字符串文字的选项。它的解析被破坏了,并且没有计划修复它,例如ur'C:\Users'SyntaxError。解决方案:升级到 Python 3。
猜你喜欢
  • 2019-08-03
  • 2015-02-17
  • 2011-01-29
  • 2019-06-30
  • 1970-01-01
  • 2012-07-14
  • 2017-11-19
  • 2016-07-30
  • 2011-11-12
相关资源
最近更新 更多