PyperclipException: только значения str, int, float и bool могут быть скопированы в буфер обмена, но не в Unicode
В настоящее время я прохожу автоматизацию скучных вещей с помощью видео курса Python и в основном копирую его показанный код и пытаюсь создать программу таким образом, мой код в настоящее время точно такой же, как в видео.
Во-первых, я изложу предназначенную для программы функцию, а во-вторых, почему, как мне кажется, в ней может быть указана выше ошибка, и буду признателен, если кто-то поможет новичку решить эту проблему.
Программа предназначена для того, чтобы взять PDF-документ, который мы скопировали в буфер обмена, документ содержит электронные письма и номера телефонов. Мы хотим, чтобы он извлек адрес электронной почты и телефон, а затем скопировал эту информацию в конце в буфер обмена.
Разница между инструктором и мной заключается в том, что я использую другой документ для копирования и извлечения телефонных номеров, поскольку тот, который он использовал, больше не существует. Текущий вывод, если я печатаю скопированные телефонные номера, - это буква u, а не нужный номер телефона.
import re, pyperclip
# Create a regex for phone numbers
phoneRegex = re.compile(r'''
(((\d\d\d)|(\(\d\d\d\)))? # area code <optional>
(\s|-) # first seperator
\d\d\d # first 3 digitis
- # seperator
\d\d\d\d # last 4 digits
(((ext(\.)?\s)|x) # extension word-part<optional>
(\d{2,5}))? # extension number-part<optional> 2,5 is to signify that it can be 2-5 digits
)
''', re.VERBOSE)
# TODO:: Create a regex object for email addresses
emailRegex = re.compile(r'''
# we will make it search for emails that contain any numbers, letters plus or period symbols
[a-zA-Z0-9_.+]+ # name part
@ # @ symbol
[a-zA-Z0-9_.+]+ # domain part
''', re.VERBOSE)
# Get the text off the clipboard
text = pyperclip.paste()
# Extract the email/phone from this text
extractedPhone = phoneRegex.findall(text)
extractedEmail = emailRegex.findall(text)
allPhoneNumbers = []
for phoneNumber in extractedPhone:
allPhoneNumbers.append(phoneNumber[0])
print(allPhoneNumbers)
# TODO: Copy the extracted email/phone to the cliboard
results = '\n'.join(allPhoneNumbers) + '\n' + '\n'.join(extractedEmail)
pyperclip.copy(results)
2 ответа
Вы можете попытаться сделать список переменных allPhoneNumbers переменным как строковую переменную и вместо добавления просто объединить строку, поскольку функция pyperclip.paste() или pyperclip.copy() ожидает строку в качестве аргумента. Здесь вы пытаетесь вставить список в функцию paste (), по этой причине, даже если я получаю ту же ошибку, просто преобразуйте список в строку, и все будет работать отлично. И еще одна важная функция findAll() всегда возвращает кортеж, поэтому преобразуйте его также в строку перед объединением в результирующую строку.
У меня просто была та же проблема, и я вижу, что это, вероятно, регрессия в Pyperclip
https://github.com/asweigart/pyperclip/issues/129
попробуйте установить более старую версию. Это сработало для меня.
python2 -m pip install 'pyperclip<1.6.2'
или просто
pip install 'pyperclip<1.6.2'
Эта проблема была исправлена в Pyperclip 1.6.5. Вам просто нужно обновить, запустив pip install -U pyperclip