AttributeError:'tuple'对象没有属性'split'

时间:2015-07-20 22:59:03

标签: python split char tuples frequency

我正在尝试编写一些Python来获取密码并将其拆分为密码中的字母及其频率。我遇到的问题是我可以获得代码来打印密码中字母的频率,但是我试图单独获取它们,所以我可以把它们变成百分比来将它们与在a中找到的常见值进行比较。以书为例。例如。我可以将我的密码中的E计数与英语中的平均值12.7%进行比较。我遇到的问题是当我尝试拆分字母列表及其频率时,我得到了AttributeError:'tuple'对象没有属性'split'。不知道我能做什么,所以一些帮助将不胜感激。这是我的代码: 导入集合 导入字符串

def freq():
    info = input("File Name")
    filehandle = open(info, "r")
    data = filehandle.read().upper()
    char_counter = collections.Counter(data)
    for char, count in char_counter.most_common():
        if char in string.ascii_uppercase:
            print(char, count)
            s = (char, count)
            frequency = s.split(",")
            for freq in frequency:
                print(freq)

freq()

这是shell的直接副本

File Nametest.rtf
E 59
Traceback (most recent call last):
  File "/Users/x/Desktop/Frequency.py", line 17, in <module>
    freq()
  File "/Users/x/Desktop/Frequency.py", line 13, in freq
    frequency = s.split(",")
 AttributeError: 'tuple' object has no attribute 'split'

以前是这样做的:

File Nametest.rtf
E 59
A 43
T 39
R 37
O 29
F 25
P 25
S 23
L 23
I 22
N 19
D 18
B 17
C 15
H 14
M 12
G 9 
U 8
W 8
V 6
Y 4
X 3
K 3

我正在寻找E 12%A 10%等个别物品或类似物品(如果可能的话)。

非常感谢任何帮助。非常感谢提前:)

2 个答案:

答案 0 :(得分:1)

你正在构成一个元组,元组没有分裂,因为逗号不是元组的实际部分,它是一种分隔代码中不同条目的方法。 Split仅适用于某些类型,即字符串,只有在逗号是字符串/类型实例的一部分时才有效。

我不确定你打算从代码的那一部分中得到什么,但是你要告诉它创建一个元组(char,count),然后将该元组拆分为逗号(不可能,即使它确实如此)发生,你会有一个数组[char,count])然后对于该拆分元组中的每个值,打印值,这将打印char,count。

也许重新审视你的方式,你不会从之前的print语句中显示的那个分割中获得任何有用的信息。如果您的意图只是字母和频率,那么您已经完成了这项工作,如果您想要获得比例,添加所有频率然后使用每个单独的频率来获得它所代表的总数的比例? / p>

答案 1 :(得分:1)

你应该改变你的代码:

def freq():
    info = input("File Name")
    filehandle = open(info, "r")
    data = filehandle.read().upper()
    char_counter = collections.Counter(data)
    for char, count in char_counter.most_common():
        if char in string.ascii_uppercase:
            print(char, count)
            frequency = (char + str(count))
            for freq in frequency:
                print(freq)

固定行:

    s = (char, count)
    frequency = s.split(",")

从如此微小的信息很难说出这些行的确切功能,但解决方案就是这样。