[BangPypers] writing file with random extension to sd card using python

Sayantan skb655952 at gmail.com
Thu Oct 26 17:16:28 EDT 2017


Hi Ajinkya,

This is my two bits of understanding with files. The function 
<file_descriptor>.write(<type> object) takes a string type of object. In 
this case, trying to push in a variable of type integer would obviously 
throw an error.

With regards to your mail, we have to take into consideration that the 
following are your requirements:
1. Write the integer to the file
2. Write the integer as is in the file

Taking into consideration the first aforementioned point, the integer 
could be written in numerous ways. I am most acquainted with Python 2.x 
and in 2.x there are a few ways to write integers. For example, the 
following is one of the ways:

<file_descriptor>.write('%d' % <integer_variable>)

The aforementioned is old-style formatting and it is indeed a stylistic 
choice. Some prefer the str(<non_string_variable>) as compared to the 
above method. Apart from this, there is also the way of writing in the 
following way:

with open(<string_filepath_filename>, 'w') as f:
 	print >>f, <integer_variable>

[NOTE : This specific one mentioned above will only work with Python 2.x]

One more way is as follows(by packing the entire thing as a struct):

with open(<string_filepath_filename>, 'wb') as f:
 	if isinstance(<integer_value>, int):
 		f.write(struct.pack('i', <integer_value>))

The struct function can be found in the struct module.

Now taking into consideration the second part where the requirement is to 
write the integer as is in the file, the representation of string and 
integer is indeed different. One way, in my opinion, is to write the value 
in binary. This can be done using the bin(<integer_variable>) function. 
Some have suggested that writing the integers as fixed width binary 
strings would be best and hence suggested the following way to convert 
them:

'{0:032b}'.format(<integer_variable>) <- this will give a 32 character 
wide binary number with '0' as filler.

In my personal opinion, unless you are doing any processing in which the 
integer value has to be specifically of any width or representation, using 
the str(<non_string_variable>) should be fine.

Just one other suggestion, it is best considered to open the files using 
the with directive as compared to using the open() function.

Please feel free to correct me/add to this if I have missed anything.

--
Sayantan Bhattacharya
https://artemisfowl.github.io
Sent from Alpine

On Thu, 26 Oct 2017, Ajinkya Bobade wrote:

> Hello,
> This is my first question on this forum point me in a right way if I posted
> in a wrong place. That aside I am trying to write a file with '.bag
> ' extension to sd card( .bag is used in Ross programming).
>
> I wrote a code to write a simple integer to disk as shown
>
>
> file = open("/path/to/file", 'w')
> x = 1
>
> while True:
>    x = x + 1
>    print(x)
>    file.write(str(x))
>    file.flush()
>
> in this code I could not write file.write(x). Why is this?If I want to
> store a file(' as it is') on this disk without converting it into string
> what should I do?
> _______________________________________________
> BangPypers mailing list
> BangPypers at python.org
> https://mail.python.org/mailman/listinfo/bangpypers
>


More information about the BangPypers mailing list