【问题标题】:pyperclip not working for large textspyperclip 不适用于大文本
【发布时间】:2017-04-17 21:01:09
【问题描述】:

我在 MacOS Sierra 上使用 Python 3.5。我正在学习这门课程,用 Python 自动化无聊的东西,并且遇到了 pyperclip 的问题。当我只复制 4 行 pdf 时,代码(下)有效,但是当我复制所有文本时,我收到一条错误消息(下)。

有人可以帮我吗? pyperclip有问题吗?我的代码?我的电脑?

错误信息:

Traceback (most recent call last):
    File "/Users/ericgolden/Documents/MyPythonScripts/phoneAndEmail.py", line 35, in <module>
        text = pyperclip.paste()
    File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyperclip/clipboards.py", line 22, in paste_osx
        return stdout.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd5 in position 79: invalid continuation byte

这是我的code:

#! python3

import re, pyperclip

# Create a regex for phone numbers
phoneRegex = re.compile(r'''
# 415-555-000, 555-0000, (415) 555-0000, 555-000 ext 12345, ext. 12345, x12345
(
((\d\d\d) | (\(\d\d\d\)))?        # area code optional
(\s|-)        # first separator
\d\d\d        # first 3 digits
-        # seperator
\d\d\d\d        # last 4 digits
(((ext(\.)?\s)|x)        # extension word-part optional
(\d{2,5}))?          # extension number-part optional
)
''', re.VERBOSE)



# Create a regex for email addresses
emailRegex = re.compile(r'''
# some.+_things@(\d{2,5}))?.com
[a-zA-Z0-9_.+]+        # name part
@        # @ symbol
[a-zA-Z0-9_.+]+        # domain name part
''', re.VERBOSE)


# Get the text off the clipboard
text = pyperclip.paste()


# TODO: Extract the email/phone from this text
extractedPhone = phoneRegex.findall(text)
extractedEmail = emailRegex.findall(text)

allPhoneNumbers = []
for phoneNumber in extractedPhone:
    allPhoneNumbers.append(phoneNumber[0])

# TODO: Copy the extraced email/phone to the clipboard
results = '\n'.join(allPhoneNumbers) + '\n' + '\n'.join(extractedEmail)
pyperclip.copy(results)

【问题讨论】:

    标签: python python-3.x automation copy-paste pyperclip


    【解决方案1】:

    您可以尝试将导入更改为:import pyperclip, re 吗?

    另外,如果有帮助,这里只是我的代码示例,因为我使用的是同一本书。

    #! python3
    # phoneAndEmail.py - Finds phone numbers and email addresses on the clipboard.
    
    import pyperclip, re
    phoneRegex = re.compile(r'''(
        (\d{3}|\(\d{3}\))?                  # area code
        (\s|-|\.)?                          # separator
        (\d{3})                             # first 3 digits
        (\s|-|\.)                           # separator
        (\d{4})                             # last 4 digits
        (\s*(ext|x|ext.)\s*(\d{2,5}))?      # extension
        )''', re.VERBOSE)
    
    # Create email regex.
    emailRegex = re.compile(r'''(
     [a-zA-Z0-9._%+-]+                  # username
     @                                  # @ symbol
     [a-zA-Z0-9.-]+                     # domain name
    (\.[a-zA-Z]{2,4})                   # dot-something
    )''', re.VERBOSE)
    
    
    
    # Find matches in clipboard text.
    text = str(pyperclip.paste())
    matches = []
    for groups in phoneRegex.findall(text):
        phoneNum = '-'.join([groups[1], groups[3], groups[5]])
        if groups[8] != '':
            phoneNum += ' x' + groups[8]
        matches.append(phoneNum)
    for groups in emailRegex.findall(text):
        matches.append(groups[0])
    
    
    # Copy results to the clipboard.
    if len(matches) > 0:
        pyperclip.copy('\n'.join(matches))
        print('Copied to clipboard:')
        print('\n'.join(matches))
    else:
        print('No phone numbers or email addresses found.')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-22
      • 2021-12-12
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多