471,338 Members | 1,475 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,338 software developers and data experts.

Hexadecimal list conversion

Hi All.

I have a list which is a line from a file:
['\x003\x008\x001\x004\x007\x005\x00.\x005\x000\x00 2\x005\x009\x009\x00',
'\x002\x001\x003\x006\x002\x002\x00.\x001\x007\x00 4\x002\x008\x002\x00']

This should be in the format:
['381475.502599', '213622.174282']

I've tried a few options using replace (replacing "\x00" with "") and
trying to convert from hexademical to decimal.

But nothing has worked. Can anybody give any tips to help?

Thanks.

Dec 20 '07 #1
7 4415
On Dec 20, 12:30 pm, Neil Webster <nswebs...@gmail.comwrote:
Hi All.

I have a list which is a line from a file:
['\x003\x008\x001\x004\x007\x005\x00.\x005\x000\x00 2\x005\x009\x009\x00',
'\x002\x001\x003\x006\x002\x002\x00.\x001\x007\x00 4\x002\x008\x002\x00']

This should be in the format:
['381475.502599', '213622.174282']

I've tried a few options using replace (replacing "\x00" with "") and
trying to convert from hexademical to decimal.

But nothing has worked. Can anybody give any tips to help?
Is your file utf-16 (that would explain why your file has \x00 in
between every character)? If so, use codecs.open to read it, and you
won't get the \x00's (you'll get a unicode string).

Or you can remove them using replace:

a = a.replace('\x00', '')

HTH
--
Paul Hankin
Dec 20 '07 #2
Hi All.

I have a list which is a line from a file:
['\x003\x008\x001\x004\x007\x005\x00.\x005\x000\x00 2\x005\x009
\x009\x00',
'\x002\x001\x003\x006\x002\x002\x00.\x001\x007\x00 4\x002\x008\
x002\x00']

This should be in the format:
['381475.502599', '213622.174282']

I've tried a few options using replace (replacing "\x00" with "") and
trying to convert from hexademical to decimal.

But nothing has worked. Can anybody give any tips to help?

Thanks.
Somthing like:

line =
['\x003\x008\x001\x004\x007\x005\x00.\x005\x000\x00 2\x005\x009\x009\x00'
,
'\x002\x001\x003\x006\x002\x002\x00.\x001\x007\x00 4\x002\x008\x002\x00']

result = [''.join(x.split('\x00')) for x in line]

Cheers,

Drea
Dec 20 '07 #3
En Thu, 20 Dec 2007 09:30:14 -0300, Neil Webster <ns*******@gmail.com>
escribi�:
I have a list which is a line from a file:
['\x003\x008\x001\x004\x007\x005\x00.\x005\x000\x00 2\x005\x009\x009\x00',
'\x002\x001\x003\x006\x002\x002\x00.\x001\x007\x00 4\x002\x008\x002\x00']

This should be in the format:
['381475.502599', '213622.174282']

I've tried a few options using replace (replacing "\x00" with "") and
trying to convert from hexademical to decimal.
The replace works:

pyfor item in L:
.... print item.replace('\x00','')
....
381475.502599
213622.174282

If you got that from a file, I bet you read it using the wrong encoding.
Try opening the file using codecs.open("filename", "rb",
encoding="utf-16-be") instead of plain open. When your read it, you'll get
unicode objects instead of strings, but with the right contents. If you
wish you can convert to strings using
line_read.encode(your_system_encoding); if all your data is numeric the
encoding used is irrelevant and can be omited.

--
Gabriel Genellina

Dec 20 '07 #4

"Gabriel Genellina" <ga*******@yahoo.com.arwrote in message
news:ma***************************************@pyt hon.org...
En Thu, 20 Dec 2007 09:30:14 -0300, Neil Webster <ns*******@gmail.com>
escribi�:
>I have a list which is a line from a file:
['\x003\x008\x001\x004\x007\x005\x00.\x005\x000\x00 2\x005\x009\x009\x00',
'\x002\x001\x003\x006\x002\x002\x00.\x001\x007\x0 04\x002\x008\x002\x00']

This should be in the format:
['381475.502599', '213622.174282']

I've tried a few options using replace (replacing "\x00" with "") and
trying to convert from hexademical to decimal.

The replace works:

pyfor item in L:
... print item.replace('\x00','')
...
381475.502599
213622.174282

If you got that from a file, I bet you read it using the wrong encoding.
Try opening the file using codecs.open("filename", "rb",
encoding="utf-16-be") instead of plain open. When your read it, you'll get
unicode objects instead of strings, but with the right contents. If you
wish you can convert to strings using
line_read.encode(your_system_encoding); if all your data is numeric the
encoding used is irrelevant and can be omited.

--
Gabriel Genellina
There is an odd number of bytes in each string. Each begins and ends with
\x00, so it doesn't look like utf-16-be. But replace works:
>>L=['\x003\x008\x001\x004\x007\x005\x00.\x005\x000\x00 2\x005\x009\x009\x00','\x002\x001\x003\x006\x002\x 002\x00.\x001\x007\x004\x002\x008\x002\x00']
[s.replace('\x00','') for s in L]
['381475.502599', '213622.174282']

-Mark Tolonen

Dec 20 '07 #5
Mark T wrote:
"Gabriel Genellina" <ga*******@yahoo.com.arwrote in message
>If you got that from a file, I bet you read it using the wrong
encoding. Try opening the file using codecs.open("filename", "rb",
encoding="utf-16-be") instead of plain open.
There is an odd number of bytes in each string. Each begins and ends
with \x00, so it doesn't look like utf-16-be.
I think Gabriel is right. The OP probably butchered the original structure
with

open(filename).read().split("\n")

Peter
Dec 20 '07 #6
On Dec 21, 2:51 am, Peter Otten <__pete...@web.dewrote:
Mark T wrote:
"Gabriel Genellina" <gagsl-...@yahoo.com.arwrote in message
If you got that from a file, I bet you read it using the wrong
encoding. Try opening the file using codecs.open("filename", "rb",
encoding="utf-16-be") instead of plain open.
There is an odd number of bytes in each string. Each begins and ends
with \x00, so it doesn't look like utf-16-be.

I think Gabriel is right. The OP probably butchered the original structure
with

open(filename).read().split("\n")
Or he's read the file "normally" and then done
line = lineZAP
where ZAP is one of [:-1], .rstrip(), .rstrip("\n"), etc

However that accounts only for the rightmost trailing \x00. Looks like
each line has been chainsawed with .split(",") or whatever the
original field separator was.

If Gabriel's instructions don't "work" for the OP, the OP should show
us an unambiguous representation of the first few bytes of the
original file, instead of leaving it to guesswork:

print repr(open("the_file", "rb").read()[:200])
Dec 20 '07 #7
En Thu, 20 Dec 2007 12:51:33 -0300, Peter Otten <__*******@web.de>
escribió:
Mark T wrote:
>"Gabriel Genellina" <ga*******@yahoo.com.arwrote in message
>>If you got that from a file, I bet you read it using the wrong
encoding. Try opening the file using codecs.open("filename", "rb",
encoding="utf-16-be") instead of plain open.
>There is an odd number of bytes in each string. Each begins and ends
with \x00, so it doesn't look like utf-16-be.

I think Gabriel is right. The OP probably butchered the original
structure
with

open(filename).read().split("\n")
Sure! I take bets on this too.

--
Gabriel Genellina

Dec 20 '07 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Mike Jeffers | last post: by
10 posts views Thread by pavithra.eswaran | last post: by
5 posts views Thread by Damon | last post: by
2 posts views Thread by akash deep batra | last post: by
8 posts views Thread by Vijay | last post: by
7 posts views Thread by elliotng.ee | last post: by
6 posts views Thread by Andrea | last post: by
6 posts views Thread by sweeet_addiction16 | last post: by
11 posts views Thread by =?Utf-8?B?VHJlY2l1cw==?= | last post: by
reply views Thread by rosydwin | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.