chatgpt 都解决不了的 Python 问题,在 V2EX 请教大佬们。

332 天前
 tpjaord
我用 pyautogui 来实现从 a 文件把内容自动在 B 文件输入的效果。
但是发现个问题,执行以后好好的 a 在输出的时候就会变成ä,还有 u 会变成ü,还有 i ,o 都会变。
这是为什么?
这个问题怎么解决呢?
我用 line = line.replace("ässets", "assets") 去尝试替换,还是不行。输出的时候,还是ässets


代码如下:


import pyautogui
import time
import re

time.sleep(3)


with open('2.html', 'r', encoding='utf-8') as file:
lines = file.readlines()


for line in lines:
line = line.replace("ässets", "assets")


line = line.replace("content=", " content=").replace("src=", " src=").replace("id=", " id=").replace("href=", " href=").replace("frameborder=", " frameborder=").replace("alt=", " alt=")


pyautogui.write(line, interval=0.001)
1989 次点击
所在节点    Python
8 条回复
xipuxiaoyehua
332 天前
看起来你遇到的问题是编码问题。因为在计算机中,所有的文本都是以数字形式存储的,编码规则就是用来决定计算机怎么把数字转换成我们看得懂的文本。

可能你的 pyautogui 库是按照特定的编码规则来输入文本的,这个规则和你的文件的编码规则可能不一样,所以当它尝试把你的文件内容输入到另一个文件时,就会出现这种问题。

尝试以下的解决方案:

确保你的源文件( 2.html )和目标文件(需要被写入的文件)使用的是相同的编码。这样当你读取源文件的内容并在目标文件中输入时,应该不会出现字符转换的问题。

在你调用 pyautogui.write 之前,尝试转换你的字符串的编码。你可以使用 Python 的.encode()方法来实现。这个方法可以把一个字符串从一个编码转换到另一个编码。比如,如果你知道你的文件是使用'utf-8'编码的,而 pyautogui 库是使用'latin-1'编码的,你可以试试这样:

```python
for line in lines:
line = line.replace("ässets", "assets")
line = line.encode('latin-1').decode('utf-8') # 试试看这行代码
line = line.replace("content=", " content=").replace("src=", " src=").replace("id=", " id=").replace("href=", " href=").replace("frameborder=", " frameborder=").replace("alt=", " alt=")
pyautogui.write(line, interval=0.001)
```
注意:上述代码只是一个示例,实际中你需要找出 pyautogui 库使用的确切编码,并替换掉'latin-1'。

检查你的 Python 环境的默认编码是否和你的文件的编码匹配。你可以通过以下代码来检查你的 Python 环境的默认编码:
```python
import sys
print(sys.getdefaultencoding())
```
然后根据需要更改 Python 的默认编码。但是注意,更改 Python 的默认编码可能会影响到其他的 Python 程序,所以这个方法需要谨慎使用。

最后,尝试使用 line = line.replace("ässets", "assets")来替换字符可能不会起作用,因为这只会在 Python 的内存中更改字符串,而不会改变它在计算机中存储的数字形式,也就不会影响到编码问题。

希望这些方法可以帮助你解决问题!
Kinnice
332 天前
encoding='utf-8',确认? 而且最好用 rb 方式读取
summericy
332 天前
chatgpt 为啥解决不了,我没装对应的包,跑不了,但我觉得 chatgpt 说的好像没啥问题
=================

这个问题可能是由于键盘输入的国家或者地区设置问题导致的。例如,如果你的操作系统将键盘设置为德语或瑞典语,输入 "a"、"u"、"o" 或 "i" 时可能会自动变为 "ä"、"ü"、"ö" 或 "ï"。因为在这些语言中,按键的布局和英语是不一样的。

你可以检查一下你的操作系统的键盘输入设置,确保它们是设置为英语。

然后,你还可以尝试用 pyautogui.write()的代替方法。pyautogui.write()方法是模拟键盘按键,所以它会受到键盘布局设置的影响。你可以使用 pyperclip 库,该库可以将字符串复制到剪贴板,然后使用 pyautogui 来粘贴。以下是一个示例:

python
Copy code
import pyperclip
import pyautogui
import time

time.sleep(3)

with open('2.html', 'r', encoding='utf-8') as file:
lines = file.readlines()

for line in lines:
line = line.replace("ässets", "assets")
line = line.replace("content=", " content=").replace("src=", " src=").replace("id=", " id=").replace("href=", " href=").replace("frameborder=", " frameborder=").replace("alt=", " alt=")

# 将字符串复制到剪贴板
pyperclip.copy(line)
# 模拟键盘粘贴操作
pyautogui.hotkey('ctrl', 'v')
# 模拟键盘回车操作
pyautogui.press('enter')
time.sleep(0.001) # 间隔时间可以根据需要进行调整
这种方法不会受到键盘布局设置的影响,因为它直接从剪贴板进行粘贴。注意确保你安装了 pyperclip 库,如果没有,可以使用 pip install pyperclip 来进行安装。
tpjaord
332 天前
@summericy 谢谢 是键盘布局的问题。。
我去 太刺激了 我添加个键盘布局 系统英文 就 ok 了
tpjaord
332 天前
@xipuxiaoyehua 你这有点 gpt 啊 哈哈
summericy
332 天前
@tpjaord 用 gpt3 好像确实回答不出来,我用的 gpt4.如果是程序员的话建议买个 gpt4 ,我反正觉得很值得
tpjaord
332 天前
@summericy 早就买 4 了 3.5 编程能力 实在是比起来差很多了
AwesomeBing
327 天前
@tpjaord 问下你是在官网买的 4 还是在第三方网站上买? 官网用着感觉不太顺畅

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/948379

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX