ValueError: need more than 3 values to unpack
Fuzzyman
fuzzyman at gmail.com
Sat Jan 21 05:30:59 EST 2006
Elezar Simeon Papo wrote:
> Hello All,
>
> I have a tab separated input file (data.txt) in text format - the file
> looks like this
>
> SCHOOL DEPART1 DEPART2 DEPART3
> Harvard Economics Mathematics Physics
> Stanford Mathematics Physics
> Berkeley Physics
> U.C.L.A Biology Genetics
>
> I have to utilize Python and to generate four files based on my input
> file. The files would have this structure:
>
> First File
> ===================================
> Filename: Harvard.txt
> Harvard
> >> Economics
> >> Mathematics
> >> Physics
> ===================================
>
> Second File
> ===================================
> Filename: Stanford.txt
> Stanford
> >> Mathematics
> >> Physics
> ===================================
>
> The same pattern would follow for files 3 and 4.
>
>
> I came up with this code,
>
> ==========================================
> #! python # -*- coding: cp1252 -*-
>
> InputFILENAME = "data.txt" #Name of the data fule containg all records
> OutputFileExtension = ".txt" #File extension of output files
>
> for line in open(InputFILENAME):
>
> SCHOOL, DEPART1, DEPART2, DEPART3 = line.split('\t')
> f = open(SCHOOL.strip() + OutputFileExtension, "w+")
>
> f.write("" +SCHOOL.strip() +"\n")
> f.write(">> " +DEPART1.strip() +"\n")
> f.write(">> " +DEPART2.strip() +"\n")
> f.write(">> " +DEPART3.strip() +"\n")
>
>
> f.close() #InputFILENAME
>
> # end
> ==========================================
>
>
> I am having problems as the program will not work if all three DEPART
> values are not present. If I populate all DEPART values for all records
> program functions without issues.
>
> When I run the check module, I get the following:
> >>>
> Traceback (most recent call last):
> File "D:\Documents and
> Settings\administrator\Desktop\code\test\testcode.py", line 8, in ?
>
> SCHOOL, DEPART1, DEPART2, DEPART3 = line.split('\t')
> ValueError: need more than 3 values to unpack
> >>>
>
>
>
> How do I solve this problem and change the program so it does not stop
> if a data record has less than three DEPART values.
>
> Thanks for your help!
>
Sounds like homework ;-)
if you do :
values = line.split('\t')
Then you have a list with all the separate values in it.
You can then do the first line :
f.write("" +values[0].strip() +"\n")
Then the rest...
for entry in values[1:]:
f.write(">> " +entry.strip() +"\n")
This will work whatever the number of values. It won't report any badly
formed lines to you though.
All the best,
Fuzzyman
http://www.voidspace.org.uk/python/index.shtml
> Elezar
More information about the Python-list
mailing list