pyperclip不适合大文本

时间:2017-04-17 21:01:10

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

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

有人可以帮助我吗?这是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)

1 个答案:

答案 0 :(得分:0)

你可以尝试将导入更改为: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.')