PyperclipException: только значения str, int, float и bool могут быть скопированы в буфер обмена, но не в Unicode

В настоящее время я прохожу автоматизацию скучных вещей с помощью видео курса Python и в основном копирую его показанный код и пытаюсь создать программу таким образом, мой код в настоящее время точно такой же, как в видео.

Во-первых, я изложу предназначенную для программы функцию, а во-вторых, почему, как мне кажется, в ней может быть указана выше ошибка, и буду признателен, если кто-то поможет новичку решить эту проблему.

  1. Программа предназначена для того, чтобы взять PDF-документ, который мы скопировали в буфер обмена, документ содержит электронные письма и номера телефонов. Мы хотим, чтобы он извлек адрес электронной почты и телефон, а затем скопировал эту информацию в конце в буфер обмена.

  2. Разница между инструктором и мной заключается в том, что я использую другой документ для копирования и извлечения телефонных номеров, поскольку тот, который он использовал, больше не существует. Текущий вывод, если я печатаю скопированные телефонные номера, - это буква 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

Другие вопросы по тегам