V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tpjaord
V2EX  ›  Python

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

  •  
  •   tpjaord · 2023-06-13 16:02:09 +08:00 · 2211 次点击
    这是一个创建于 528 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用 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)
    8 条回复    2023-06-18 09:20:58 +08:00
    xipuxiaoyehua
        1
    xipuxiaoyehua  
       2023-06-13 16:08:47 +08:00
    看起来你遇到的问题是编码问题。因为在计算机中,所有的文本都是以数字形式存储的,编码规则就是用来决定计算机怎么把数字转换成我们看得懂的文本。

    可能你的 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
        2
    Kinnice  
       2023-06-13 16:15:06 +08:00
    encoding='utf-8',确认? 而且最好用 rb 方式读取
    summericy
        3
    summericy  
       2023-06-13 16:18:10 +08:00   ❤️ 1
    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
        4
    tpjaord  
    OP
       2023-06-13 16:56:15 +08:00
    @summericy 谢谢 是键盘布局的问题。。
    我去 太刺激了 我添加个键盘布局 系统英文 就 ok 了
    tpjaord
        5
    tpjaord  
    OP
       2023-06-13 16:56:31 +08:00
    @xipuxiaoyehua 你这有点 gpt 啊 哈哈
    summericy
        6
    summericy  
       2023-06-13 17:00:37 +08:00
    @tpjaord 用 gpt3 好像确实回答不出来,我用的 gpt4.如果是程序员的话建议买个 gpt4 ,我反正觉得很值得
    tpjaord
        7
    tpjaord  
    OP
       2023-06-13 20:05:42 +08:00
    @summericy 早就买 4 了 3.5 编程能力 实在是比起来差很多了
    AwesomeBing
        8
    AwesomeBing  
       2023-06-18 09:20:58 +08:00
    @tpjaord 问下你是在官网买的 4 还是在第三方网站上买? 官网用着感觉不太顺畅
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2690 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:24 · PVG 20:24 · LAX 04:24 · JFK 07:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.