从Excel复制粘贴列时出现错误
我想写一个函数来处理一些我从Excel里拿来的数据。这些数据基本上是在Excel的一列里(交易ID)。为了方便起见,我想用raw_input把这列数据复制粘贴进来,存储起来,然后在这个数据上运行我的函数。
但是,不管我怎么做,我总是遇到错误(我实际上在导入数据的这个第一步就卡住了),我很确定问题出在每个项目都在新的一行上(当我用Excel的转置功能把列变成行时,就没有错误了)。
举个例子,如果我想试着设置一个样本字符串,比如:
some_string = "014300071432Gre
014300054037Col
014300065692ASC"
(这是从Excel列粘贴过来的格式),然后我把它叫做some_string,我会得到:
File "<stdin>", line 1
al = "014300071432Gre
^
SyntaxError: EOL while scanning string literal
我尝试用.split()来去掉换行符,但没成功。
我还试过在几个讨论中看到的三重引号,但也没有用。这让我更加困惑,因为我以为三重引号是用来让Python不去计算某些东西的。
我在这里放了一些谷歌文档里的示例数据。
非常感谢任何帮助。谢谢!
3 个回答
some_string = """014300071432Gre
014300054037Col
014300065692ASC"""
三重引号是用来表示多行字符串的,
你可以这样写:
some_string = "014300071432Gre\n014300054037Col\n014300065692ASC"
当然可以!请看下面的内容:
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭。
有些时候,我们会遇到一些问题,比如数据格式不对,或者数据缺失。这就像是你打开冰箱,发现缺少了某种食材,导致你不能做出想要的菜。
为了避免这些问题,程序员通常会写一些代码来检查数据的完整性和正确性。这就像是在做饭之前,先检查一下冰箱里的食材是否齐全。
如果数据有问题,程序会给出错误提示,告诉你哪里出了问题。这样你就可以及时修正,就像是你发现缺少了盐,就去超市买盐回来。
总之,处理数据就像做饭一样,需要仔细检查,确保一切都准备好,这样才能做出美味的菜肴。
some_string = '''014300071432Gre
014300054037Col
014300065692ASC'''
你说得对,使用 raw_input
来处理从 Excel 复制的列数据时,确实会遇到换行符的问题。因为 raw_input
这个函数是专门用来读取一行的内容的。根据官方文档的说明:
raw_input([prompt])
如果有 prompt 参数,它会被输出到标准输出中,但不会换行。这个函数会从输入中读取一行,转换成字符串(去掉末尾的换行符),然后返回这个字符串。
换行符的定义就是标志一行的结束。所以,实际上没有简单的方法可以把 Excel 的一列数据直接粘贴到 raw_input
中。
在大多数情况下,从 Python 读取 Excel 数据的最佳方法是直接读取 Excel 文件。最好的工具包是xlrd。假设你的工作簿叫 myData.xls
,你想从第一个工作表读取 A2:A5 的数据,你可以这样做:
import xlrd
wb = xlrd.open_workbook('myData.xls')
ws = wb.sheet_by_index(0)
result = ws.col_values(0, 1, 5)
到那时,result
将会是一个包含四个单元格值的列表(A2、A3、A4 和 A5)。
如果你真的希望用户界面能够“在 Excel 中复制一系列单元格,然后粘贴到我的应用程序中”,那么你可能需要考虑构建一个有多行文本输入框的图形用户界面(GUI)。在这方面你有很多选择,从 Python 自带的Tkinter
,到第三方库,甚至是非 Python 的 GUI(只要它们能读取输入并将其传递给你的 Python 程序)。
补充:你可以直接读取剪贴板(这样就根本不需要粘贴这一步)。可以查看这些 问题以获取更多信息。从这些问题中得到的最简单的解决方案是使用 Tkinter:
from Tkinter import Tk
r = Tk()
result = r.selection_get(selection='CLIPBOARD')
r.destroy()
上述代码假设剪贴板已经有内容。换句话说,整个流程大致是这样的:
- 你的程序提示用户在 Excel 中复制一个选定区域
- 用户在 Excel 中复制选定区域
- 用户回应你的程序的提示(告诉你的程序剪贴板已经准备好了)
- 你的程序运行上述代码,将剪贴板的内容抓取到
result
中 - 你的程序根据需要处理
result
当然,还有更复杂的方法,但这些应该足够让你开始了。