Идеи для ручного копирования-вставки из Excel в python код в Spyder - PullRequest
0 голосов
/ 16 апреля 2020

Я часто работаю с листами Excel, из которых хочу скопировать только один указанный столбец чисел c в мой скрипт python для построения графиков. Это должно быть сделано вручную, поскольку это всегда другой файл, столбцы и строки.

Чтобы использовать numpy массивы, мне нужны данные с запятой для создания массива python таким образом ( Я должен был добавить пробелы, иначе stackexchange разместил бы это в строке):

myArray=np.array([
    1,
    2,
    3,
    4,
    6
)]

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

Ребята, вы знаете, как python может проглотить мои данные без запятых? Например,

myData = someFunction(
   1
   2
   3
   4
   6
)

Или у вас есть другая идея, как добавить запятые более элегантно? Я использую Spyder с Python 3.

Спасибо!

1 Ответ

0 голосов
/ 16 апреля 2020

Редактировать : если требуется скопировать один столбец или строку, а не сетку. in_ ниже можно использовать с replace для создания строки, разделенной запятыми.

# First copy a column from a spread sheet to the clipboard.
# in_() will return the values separated by newlines '\n'. 
# replace these by comma
in_()
# Out[21]: '3\n13\n23\n33\n43\n53\n63\n73\n83\n93\n103\n113\n123\n'
in_().replace('\n', ',')
# Out: '3,13,23,33,43,53,63,73,83,93,103,113,123,'

# If copying a row the copied separator is tab '\t'
# Copy a row in a spreadsheet
in_()
# Out: '60\t61\t62\t63\t64\t65\t66\t67\t68\n'    
in_().replace('\t', ',')[:-1] # [-1] removes the newline character.
# Out[25]: '60,61,62,63,64,65,66,67,6'

Я написал in_() и from_grid() для копирования данных из электронных таблиц в переменные, которые я хотел использовать в моем python Терминал. Они позволяют пользователю копировать область в электронной таблице в буфер обмена. in_() вернет клип в виде строки. from_grid() вернет это преобразованное в список списков строк.

import tkinter as tk
import numpy as np

def in_():
    """
    Returns the contents of the clipboard as text.
    Usage:  txt = in_()
    """
    clip=tk.Tk()
    clip.withdraw()
    temp=clip.selection_get(selection="CLIPBOARD")
    clip.destroy()
    return temp

def from_grid(delimit_row="\n", delimit_cell="\t"):
    """
    Returns a list of lists copied from the clipboard.
    Usage:  grid=from_grid(delimit_row="\t", delimit_cell="\n")
        grid is a list of lists 
        [  [ r00, r01, r02, ... ],
           [ r10, r11, r12, ... ],
            ....
        ]
    by defaut:  the row delimiter is a newline, "\n"
                the cell delimiter is a tab character, "\t"

    This will paste a copied region of a spreadsheet into a list of lists.
    """
    txt=in_()
    rows=txt.split(delimit_row)
    ret=[]
    for row in rows:
        temp=row.split(delimit_cell)
        ret.append(temp)
    return ret[:-1]  # A final empty last row is appended.
                     # This loses it.

import numpy as np

def to_floats( data ):
    result= []
    for row in data:
        temp = []
        for item in row:
            temp.append(float(item))
        result.append(temp)
    return np.array(result)

arr = to_floats( from_grid() )

Это не делает в точности то, что вы просили, но дает способ получить данные электронной таблицы в python, где они могут быть обработаны.

Запуск этого в Консоль python позволит пользователю распечатать результаты, которые затем можно будет скопировать в сценарий.

Могут быть более точные способы сделать это. Вокруг есть несколько библиотек, Pyperclip - одна, но я никогда не использовал ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...