如何在python中读取excel数据和优化代码

如何在python中读取excel数据和优化代码,python,python-2.7,excel-2010,Python,Python 2.7,Excel 2010,我的代码是计算代币。 它从文本文件中获取输入。我想从excel中获取输入,但如何获取? 另一个问题是,代码不适用于相对较大的数据。我如何优化它 # start import codecs from collections import Counter def count_char(Input): #Input file fi= codecs.open('G:\python-proj/text.txt' , 'r',encoding='utf-8') Input= fi.read() #cou

我的代码是计算代币。 它从文本文件中获取输入。我想从excel中获取输入,但如何获取? 另一个问题是,代码不适用于相对较大的数据。我如何优化它

# start
import codecs
from collections import Counter
def count_char(Input):

#Input file
fi= codecs.open('G:\python-proj/text.txt' , 'r',encoding='utf-8')
Input= fi.read()

#count words
spli=Input.split()
freq = Counter(spli)
sum=len(list(freq.elements()))
print('Total Tokenes:\n ')       
print(sum)
print('\n')
count_char(Input)
1) 您可以将excel文件保存为.csv格式,并使用Python内置的csv读取器对其进行解析

2) 在大型数据集上速度很慢,因为您使用
fi.read()
一次将整个文件读入内存。您可以计算每行上的令牌数:


对于fi.read()中的行:
使用(line.split())执行某些操作

1)您可以将excel文件保存为.csv格式,并使用Python内置的csv读取器对其进行解析

2) 在大型数据集上速度很慢,因为您使用
fi.read()
一次将整个文件读入内存。您可以计算每行上的令牌数:


对于fi.read()中的行:
使用(line.split())执行某些操作

Input=fi.read()
将整个文件读取到内存中。这就是为什么大文件会把你绊倒的原因。解决办法是逐行阅读

大文件仍然可能会使您绊倒,因为您正在将单词保存在
计数器
对象中。如果复制品很少,那么该对象将变得非常大。如果复制品是通用的,则内存不会成为问题

someCounter
具有大量计数时,无论您做什么,都不要调用
list(someCounter.elements())
。它将返回一个非常大的列表。(如果
someCounter=Counter({'redrum':100000})
那么
list(someCounter.elements())
将为您提供一个包含100000个元素的列表!)

注意,使用<代码>行.SPLIT()/代码>可能会导致一些单词被认为是唯一的,而不会被认为是唯一的。考虑:

>>> line = 'Red cars raced red cars.\n'
>>> Counter(line.split())
Counter({'cars': 1, 'cars.': 1, 'raced': 1, 'red': 1, 'Red': 1})
如果我们希望将
'red'
'red'
计算在一起,而不考虑大小写,我们可以这样做:

>>> line = 'Red cars raced red cars.\n'
>>> Counter(s.lower().split()) # everything is made lowercase before counting
Counter({'red': 2, 'cars': 1, 'cars.': 1, 'raced': 1})
如果我们想将
'cars'
'cars.
计算在一起,而不考虑标点,我们将标点去掉如下:

>>> import string
>>> punct = string.punctuation
>>> line = 'Red cars raced red cars.\n'
>>> Counter(word.strip(punct) for word in line.lower().split())
Counter({'cars': 2, 'red': 2, 'raced': 1})

关于阅读Excel文件,您的问题需要更有针对性。从开始,选择最合适的库,尝试编写一些代码,搜索StackOverflow的答案,然后将遇到的任何问题作为问题与代码一起发布,显示您的尝试。

Input=fi.read()
将整个文件读取到内存中。这就是为什么大文件会把你绊倒的原因。解决办法是逐行阅读

大文件仍然可能会使您绊倒,因为您正在将单词保存在
计数器
对象中。如果复制品很少,那么该对象将变得非常大。如果复制品是通用的,则内存不会成为问题

someCounter
具有大量计数时,无论您做什么,都不要调用
list(someCounter.elements())
。它将返回一个非常大的列表。(如果
someCounter=Counter({'redrum':100000})
那么
list(someCounter.elements())
将为您提供一个包含100000个元素的列表!)

注意,使用<代码>行.SPLIT()/代码>可能会导致一些单词被认为是唯一的,而不会被认为是唯一的。考虑:

>>> line = 'Red cars raced red cars.\n'
>>> Counter(line.split())
Counter({'cars': 1, 'cars.': 1, 'raced': 1, 'red': 1, 'Red': 1})
如果我们希望将
'red'
'red'
计算在一起,而不考虑大小写,我们可以这样做:

>>> line = 'Red cars raced red cars.\n'
>>> Counter(s.lower().split()) # everything is made lowercase before counting
Counter({'red': 2, 'cars': 1, 'cars.': 1, 'raced': 1})
如果我们想将
'cars'
'cars.
计算在一起,而不考虑标点,我们将标点去掉如下:

>>> import string
>>> punct = string.punctuation
>>> line = 'Red cars raced red cars.\n'
>>> Counter(word.strip(punct) for word in line.lower().split())
Counter({'cars': 2, 'red': 2, 'raced': 1})

关于阅读Excel文件,您的问题需要更有针对性。从开始,选择最合适的库,尝试编写一些代码,搜索StackOverflow以获得答案,然后将遇到的任何问题作为问题与代码一起发布,显示您的尝试。

关于阅读Excel文件,您的问题需要更有针对性。从python-excel.org开始,选择最合适的库,尝试编写一些代码,搜索StackOverflow以寻找答案,然后将遇到的任何问题作为问题与代码一起发布,显示您的尝试。请参见帮助中心中的。我已经回答了你下面问题的另一部分。关于阅读Excel文件,你的问题需要更有针对性。从python-excel.org开始,选择最合适的库,尝试编写一些代码,搜索StackOverflow以寻找答案,然后将遇到的任何问题作为问题与代码一起发布,显示您的尝试。请参见帮助中心中的。我已经回答了你下面问题的另一部分。我使用计数器是因为我不想计算重复的代币。我是python中的bigenner。@Kossaar:更新了答案。我使用计数器是因为我不想计算重复的令牌。我是python中的比格纳。@Kossaar:更新的答案。