如何解决转换字典中的文本
我有一个这样的文本文件,我正在将文本文件转换成字典。将其中一个值作为键,将其余值作为键内的值。
0.8,3.5,jerry,5.5,4,78
0.9,2,amy,6.2,1.0,alan,7.8,9,90
openData = open("students.txt",'r')
myDic = dict()
for col in openData:
line = col.strip().split(",")
q1 = line[0]
q2 = line[1]
name = line[3]
mag = line[4]
grade = line[6]
myDic[name] = q1,q2,mag,grade
print(myDic)
我的问题是当我尝试运行它时,输出一直说等级 = line[6] 超出范围。 有人可以帮忙吗?谢谢
解决方法
我认为如果你在 90 后加一个逗号应该可以正常工作。
1.0,4,alan,7.8,9,90,
问题是当你用逗号分隔时,最后一行只有 6 个项目。
,在尝试使用 line
之前检查 line[6]
的长度
for col in openData:
line = col.strip().split(",")
q1 = line[0]
q2 = line[1]
name = line[3]
mag = line[4]
if len(line) >= 5:
grade = line[6]
else:
grade = ''
myDic[name] = q1,q2,mag,grade
,
你也可以填充行尾:
include <iostream>
using namespace std;
struct DogProperty //provided by 3rd party libarary
{
char pawShape;
char tailShape;
};
struct BirdProperty //provided by 3rd party libarary
{
char wingLength;
char wingWidth;
};
void decodeDog(char *msg,DogProperty *p) //provided by 3rd party libarary
{
p->pawShape = msg[2];
p->tailShape = msg[3];
}
void decodeBird(char *msg,BirdProperty *p) //provided by 3rd party libarary
{
p->wingLength = msg[2];
p->wingWidth = msg[3];
}
class Animal
{
public:
Animal(int type) : type(type) {}
virtual ~Animal(){}
int type;
};
class Dog : public Animal
{
public:
Dog(DogProperty property) : Animal(0)
{
this->property = property;
}
DogProperty property;
};
class Bird : public Animal
{
public:
Bird(BirdProperty property) : Animal(1)
{
this->property = property;
}
BirdProperty property;
};
Animal* readMessage(char *message)
{
if (message[0] == '0')
{
DogProperty property;
decodeDog(message,&property);
return new Dog(property);
}
if (message[0] == '1')
{
BirdProperty property;
decodeBird(message,&property);
return new Bird(property);
}
// other animals
return new Animal(-1);
}
void processDog(Dog *dog)
{
cout<<"Dog Paw: ";
cout<<dog->property.pawShape<<endl;
}
int main()
{
char messageA[20] = "0-1030202da-0302s";
char messageB[20] = "1-1032649sf-0239s";
char messageC[20] = "2-1032298kd-0357s";
Animal* myAnimal = readMessage(messageA);
if (myAnimal->type == 0)
{
Dog *dog = dynamic_cast<Dog*>(myAnimal);
processDog(dog);
}
return 0;
}
myDic = dict()
for col in openData:
line = (col + ','*6).strip().split(',')
q1,name,grade = [line[i] for i in (0,1,2,3,6)]
myDic[name] = q1,grade
print(myDic)
部分添加了 6 个逗号,从而保证了 7 个可用字段,根据需要替换尽可能多的空格。
这可以补偿数据文件中一行末尾的缺失数据,但不能补偿中间的数据。为此,您可能需要清理源数据,大概在字段为空的地方添加逗号。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。