Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > File-writing not working in Windows?

Reply
Thread Tools

File-writing not working in Windows?

 
 
tdahsu@gmail.com
Guest
Posts: n/a
 
      06-06-2008
All,

I have the following code:
for fileTarget in dircache.listdir("directory"):
(dirName, fileName) = os.path.split(fileTarget)
f = open(fileTarget).readlines()
copying = False
for i in range(len(f)):
for x in range (0,24,1):
if (re.search(self.Info[x][3], f[i])):
#If we have a match for our start of section...
if (self.Info[x][2] == True):
#And it's a section we care about...
copying =
True #Let's start copying the lines out
to the temporary file...
if (os.name == "posix"):
if (self.checkbox25.GetValue() ==
False):
tempfileName = "tempdir/" +
self.Info[x][0] + "_tmp_" + fileName + ".txt"
else:
tempfileName =
self.textctrl07.GetValue() + "/" + self.Info[x][0] + "_xyz.txt"
else:
if (self.checkbox25.GetValue() ==
False):
tempfileName = "tempdir\\" +
self.Info[x][0] + "_tmp_" + fileName + ".txt"
else:
tempfileName =
self.textctrl07.GetValue() + "\\" + self.Info[x][0] + "_xyz.txt"
else:
copying = False
if (re.search(self.Info[x][4], f[i])):
#Now we've matched the end of our section...
copying =
False #So let's stop copying out to
the temporary file...
if (copying == True):
g = open(tempfileName,
'a') #Open that file in append mode...

g.write(f[i]) #Write the line...
g.close()

This code works PERFECTLY in Linux. Where I have a match in the file
I'm processing, it gets cut out from the start of the match until the
end of the match, and written to the temporary file in tempdir.

It does not work in Windows. It does not create or write to the
temporary file AT ALL. It creates the tempdir directory with no
problem.

Here's the kicker: it works perfectly in Windows if Windows is running
in VMware on a Linux host! (I assume that that's because VMware is
passing some call to the host.)

Can anyone tell me what it is that I'm missing which would prevent the
file from being created on Windows natively?

I'm sorry I can't provide any more of the code, and I know that that
will hamper your efforts in helping me, so I apologise up front.

Assumptions:
You can assume self.checkbox25.GetValue() is always false for now, and
self.Info[x][0] contains a two character string like "00" or "09" or
"14". There is always a match in the fileTarget, so self.Info[x][2]
will always be true at some point, as will self.Info[x][4]. I am
cutting an HTML file at predetermined comment sections, and I have
control over the HTML files that are being cut. (So I can force the
file to match what I need it to match if necessary.)

I hope however that it's something obvious that a Python guru here
will be able to spot and that this n00b is missing!

Thanks!
 
Reply With Quote
 
 
 
 
jay graves
Guest
Posts: n/a
 
      06-06-2008
On Jun 6, 10:18 am, (E-Mail Removed) wrote:
<snippage>
> This code works PERFECTLY in Linux. Where I have a match in the file
> I'm processing, it gets cut out from the start of the match until the
> end of the match, and written to the temporary file in tempdir.
> It does not work in Windows. It does not create or write to the
> temporary file AT ALL. It creates the tempdir directory with no
> problem.


In general, I don't use string concatenation when building paths.
Especially on scripts that are meant to run on multiple platforms.


> Here's the kicker: it works perfectly in Windows if Windows is running
> in VMware on a Linux host! (I assume that that's because VMware is
> passing some call to the host.)


probably a red herring.

> Can anyone tell me what it is that I'm missing which would prevent the
> file from being created on Windows natively?


Get rid of the 'posix' check and use os.path.join to create
'tempfileName' and see if it works.

HTH.
....
Jay Graves
 
Reply With Quote
 
 
 
 
tdahsu@gmail.com
Guest
Posts: n/a
 
      06-06-2008
On Jun 6, 11:35*am, jay graves <(E-Mail Removed)> wrote:
> On Jun 6, 10:18 am, (E-Mail Removed) wrote:
> <snippage>
>
> > This code works PERFECTLY in Linux. *Where I have a match in the file
> > I'm processing, it gets cut out from the start of the match until the
> > end of the match, and written to the temporary file in tempdir.
> > It does not work in Windows. *It does not create or write to the
> > temporary file AT ALL. *It creates the tempdir directory with no
> > problem.

>
> In general, I don't use string concatenation when building paths.
> Especially on scripts that are meant to run on multiple platforms.
>
> > Here's the kicker: it works perfectly in Windows if Windows is running
> > in VMware on a Linux host! *(I assume that that's because VMware is
> > passing some call to the host.)

>
> probably a red herring.
>
> > Can anyone tell me what it is that I'm missing which would prevent the
> > file from being created on Windows natively?

>
> Get rid of the 'posix' check and use os.path.join to create
> 'tempfileName' and see if it works.
>
> HTH.
> ...
> Jay Graves


Jay,

Thank you for your answer. I have researched os.path.join. I have
changed the code to read as follows:

if (self.checkbox25.GetValue() == False):
initialFileName = self.Info[x][0] + "_tmp_" + fileName + ".txt"
tempfileName = os.path.join("proctemp", initialFileName)
else:
initialFileName = self.Info[x][0] + "_xyz.txt"
tempfileName = os.path.join("proctemp", initialFileName)

this still works in Linux; it does not work in Windows.

I am thinking that the "g.open(tempFileName, 'a')" command is the
issue. Is there anything different about opening a file in Windows?
Does Windows understand "append", or would I have to do control checks
for seeing if the file is created and then appending?
 
Reply With Quote
 
jay graves
Guest
Posts: n/a
 
      06-06-2008
On Jun 6, 1:22 pm, (E-Mail Removed) wrote:
> I am thinking that the "g.open(tempFileName, 'a')" command is the
> issue. Is there anything different about opening a file in Windows?
> Does Windows understand "append", or would I have to do control checks
> for seeing if the file is created and then appending?


Does your file have embedded nulls?
Try opening it in binary mode.

g.open(tempFileName,'ab')

Note that this will turn off Universal newline support.

Barring that, can you distill the problem down by writing a script
that exhibits the behavior without the rest of your program?

....
Jay
 
Reply With Quote
 
tdahsu@gmail.com
Guest
Posts: n/a
 
      06-06-2008
On Jun 6, 2:58*pm, jay graves <(E-Mail Removed)> wrote:
> On Jun 6, 1:22 pm, (E-Mail Removed) wrote:
>
> > I am thinking that the "g.open(tempFileName, 'a')" command is the
> > issue. *Is there anything different about opening a file in Windows?
> > Does Windows understand "append", or would I have to do control checks
> > for seeing if the file is created and then appending?

>
> Does your file have embedded nulls?
> Try opening it in binary mode.
>
> g.open(tempFileName,'ab')
>
> Note that this will turn off Universal newline support.
>
> Barring that, can you distill the problem down by writing a script
> that exhibits the behavior without the rest of your program?
>
> ...
> Jay


Jay,

This did not make a difference in my script. However, I did what you
suggested, and tried the simple script it Windows, and it works as it
should.

(It's really annoying because it works on the Mac and Linux! (I just
tested my script on the Mac as well.) It only doesn't work on
Windows, though clearly the file processing I am doing SHOULD work.)

Now I have to find out what it is about my code that's causing the
problem...
 
Reply With Quote
 
jay graves
Guest
Posts: n/a
 
      06-06-2008
On Jun 6, 3:19 pm, (E-Mail Removed) wrote:
> This did not make a difference in my script. However, I did what you
> suggested, and tried the simple script it Windows, and it works as it
> should.
> (It's really annoying because it works on the Mac and Linux! (I just
> tested my script on the Mac as well.) It only doesn't work on
> Windows, though clearly the file processing I am doing SHOULD work.)


Is there a global exception handler somewhere in your code that could
be eating an error that only happens on windows? (something weird
like file permissions.) I'm really at a loss.

Sorry.

....
Jay




 
Reply With Quote
 
John Machin
Guest
Posts: n/a
 
      06-06-2008
On Jun 7, 1:18 am, (E-Mail Removed) wrote:
> All,
>


[code snipped]

>
> This code works PERFECTLY in Linux. Where I have a match in the file
> I'm processing, it gets cut out from the start of the match until the
> end of the match, and written to the temporary file in tempdir.
>
> It does not work in Windows. It does not create or write to the
> temporary file AT ALL. It creates the tempdir directory with no
> problem.
>
> Here's the kicker: it works perfectly in Windows if Windows is running
> in VMware on a Linux host! (I assume that that's because VMware is
> passing some call to the host.)
>
> Can anyone tell me what it is that I'm missing which would prevent the
> file from being created on Windows natively?
>
> I'm sorry I can't provide any more of the code, and I know that that
> will hamper your efforts in helping me, so I apologise up front.
>
> Assumptions:
> You can assume self.checkbox25.GetValue() is always false for now, and
> self.Info[x][0] contains a two character string like "00" or "09" or
> "14". There is always a match in the fileTarget, so self.Info[x][2]
> will always be true at some point, as will self.Info[x][4]. I am
> cutting an HTML file at predetermined comment sections, and I have
> control over the HTML files that are being cut. (So I can force the
> file to match what I need it to match if necessary.)


Assume nothing. Don't believe anyone who says "always". Insert some
print statements and repr() calls to show what's actually there.

> I hope however that it's something obvious that a Python guru here
> will be able to spot and that this n00b is missing!


*IF* the problem is in the code, it would be easier to spot if you had
removed large chunks of indentation before posting.

Less is more: change "if (foo == 2):" to "if foo == 2:", "foo == True"
to "foo", and "foo == False" to "not foo".

Browse http://www.python.org/dev/peps/pep-0008/

HTH,
John
 
Reply With Quote
 
Ivan
Guest
Posts: n/a
 
      06-07-2008

John Machin ?????:
> On Jun 7, 1:18 am, (E-Mail Removed) wrote:
>
> Assume nothing. Don't believe anyone who says "always". Insert some
> print statements and repr() calls to show what's actually there.
>
>
>> I hope however that it's something obvious that a Python guru here
>> will be able to spot and that this n00b is missing!
>>

>
> *IF* the problem is in the code, it would be easier to spot if you had
> removed large chunks of indentation before posting.
>
> Less is more: change "if (foo == 2):" to "if foo == 2:", "foo == True"
> to "foo", and "foo == False" to "not foo".
>
> Browse http://www.python.org/dev/peps/pep-0008/
>
> HTH,
> John
>

Hello,
I tried os.path.join() under Windows XP and everything works as
expected. The problem is in your script. You may use logger or use
additional checks (John Machin wrote about this practice).

TBRDs,
Ivan

 
Reply With Quote
 
Lie
Guest
Posts: n/a
 
      06-08-2008
On Jun 6, 10:18*pm, (E-Mail Removed) wrote:
> All,
>
> I have the following code:
> * * * * * *for fileTarget in dircache.listdir("directory"):
> * * * * * * * * (dirName, fileName) = os.path.split(fileTarget)
> * * * * * * * * f = open(fileTarget).readlines()
> * * * * * * * * copying = False
> * * * * * * * * for i in range(len(f)):
> * * * * * * * * * * for x in range (0,24,1):
> * * * * * * * * * * * * if (re.search(self.Info[x][3], f[i])):
> #If we have a match for our start of section...
> * * * * * * * * * * * * * * if (self.Info[x][2] == True):
> #And it's a section we care about...
> * * * * * * * * * * * * * * * * copying =
> True * * * * * * * * * * * * * * *#Let's start copying the lines out
> to the temporary file...
> * * * * * * * * * * * * * * * * if (os.name == "posix"):
> * * * * * * * * * * * * * * * * * * if (self.checkbox25.GetValue() ==
> False):
> * * * * * * * * * * * * * * * * * * * * tempfileName = "tempdir/" +
> self.Info[x][0] + "_tmp_" + fileName + ".txt"
> * * * * * * * * * * * * * * * * * * else:
> * * * * * * * * * * * * * * * * * * * * tempfileName =
> self.textctrl07.GetValue() + "/" + self.Info[x][0] + "_xyz.txt"
> * * * * * * * * * * * * * * * * else:
> * * * * * * * * * * * * * * * * * * if (self.checkbox25.GetValue() ==
> False):
> * * * * * * * * * * * * * * * * * * * * tempfileName = "tempdir\\" +
> self.Info[x][0] + "_tmp_" + fileName + ".txt"
> * * * * * * * * * * * * * * * * * * else:
> * * * * * * * * * * * * * * * * * * * * tempfileName =
> self.textctrl07.GetValue() + "\\" + self.Info[x][0] + "_xyz.txt"
> * * * * * * * * * * * * * * else:
> * * * * * * * * * * * * * * * * copying = False
> * * * * * * * * * * * * if (re.search(self.Info[x][4], f[i])):
> #Now we've matched the end of our section...
> * * * * * * * * * * * * * * copying =
> False * * * * * * * * * * * * * * * * #So let's stop copying out to
> the temporary file...
> * * * * * * * * * * if (copying == True):
> * * * * * * * * * * * * g = open(tempfileName,
> 'a') * * * * * * * * * * #Open that file in append mode...
>
> g.write(f[i]) * * * * * * * * * * * * * * * * * * * #Write the line...
> * * * * * * * * * * * * g.close()
>
> This code works PERFECTLY in Linux. *Where I have a match in the file
> I'm processing, it gets cut out from the start of the match until the
> end of the match, and written to the temporary file in tempdir.
>
> It does not work in Windows. *It does not create or write to the
> temporary file AT ALL. *It creates the tempdir directory with no
> problem.
>
> Here's the kicker: it works perfectly in Windows if Windows is running
> in VMware on a Linux host! *(I assume that that's because VMware is
> passing some call to the host.)
>
> Can anyone tell me what it is that I'm missing which would prevent the
> file from being created on Windows natively?
>
> I'm sorry I can't provide any more of the code, and I know that that
> will hamper your efforts in helping me, so I apologise up front.
>
> Assumptions:
> You can assume self.checkbox25.GetValue() is always false for now, and
> self.Info[x][0] contains a two character string like "00" or "09" or
> "14". *There is always a match in the fileTarget, so self.Info[x][2]
> will always be true at some point, as will self.Info[x][4]. *I am
> cutting an HTML file at predetermined comment sections, and I have
> control over the HTML files that are being cut. *(So I can force the
> file to match what I need it to match if necessary.)
>
> I hope however that it's something obvious that a Python guru here
> will be able to spot and that this n00b is missing!
>
> Thanks!


Well, not to be rude, but that's quite a spaghetti code, some of the
guilt, however, was for the mailing program that cuts 80+ lines.
Others was the use of things like "for i in range(len(f)):" or "if (a
== True)".

Try checking whether you're trying to write to a path like r"\dir
\file.txt" or r"dir\file.txt" instead of r"C:\dir\file.txt" in
Windows.

If that doesn't solve the problem, tell us a few things:
- Any error messages? Or simply nothing is written out?
- Has a blank file get created?
 
Reply With Quote
 
tdahsu@gmail.com
Guest
Posts: n/a
 
      06-08-2008
On Jun 8, 4:11*am, Lie <(E-Mail Removed)> wrote:
> On Jun 6, 10:18*pm, (E-Mail Removed) wrote:
>
>
>
>
>
> > All,

>
> > I have the following code:
> > * * * * * *for fileTarget in dircache.listdir("directory"):
> > * * * * * * * * (dirName, fileName) = os.path.split(fileTarget)
> > * * * * * * * * f = open(fileTarget).readlines()
> > * * * * * * * * copying = False
> > * * * * * * * * for i in range(len(f)):
> > * * * * * * * * * * for x in range (0,24,1):
> > * * * * * * * * * * * * if (re.search(self.Info[x][3], f[i])):
> > #If we have a match for our start of section...
> > * * * * * * * * * * * * * * if (self.Info[x][2] == True):
> > #And it's a section we care about...
> > * * * * * * * * * * * * * * * * copying =
> > True * * * * * * * * * * * * * * *#Let's start copying the lines out
> > to the temporary file...
> > * * * * * * * * * * * * * * * * if (os.name == "posix"):
> > * * * * * * * * * * * * * * * * * * if (self.checkbox25.GetValue() ==
> > False):
> > * * * * * * * * * * * * * * * * * * * * tempfileName = "tempdir/" +
> > self.Info[x][0] + "_tmp_" + fileName + ".txt"
> > * * * * * * * * * * * * * * * * * * else:
> > * * * * * * * * * * * * * * * * * * * * tempfileName =
> > self.textctrl07.GetValue() + "/" + self.Info[x][0] + "_xyz.txt"
> > * * * * * * * * * * * * * * * * else:
> > * * * * * * * * * * * * * * * * * * if (self.checkbox25.GetValue() ==
> > False):
> > * * * * * * * * * * * * * * * * * * * * tempfileName = "tempdir\\" +
> > self.Info[x][0] + "_tmp_" + fileName + ".txt"
> > * * * * * * * * * * * * * * * * * * else:
> > * * * * * * * * * * * * * * * * * * * * tempfileName =
> > self.textctrl07.GetValue() + "\\" + self.Info[x][0] + "_xyz.txt"
> > * * * * * * * * * * * * * * else:
> > * * * * * * * * * * * * * * * * copying = False
> > * * * * * * * * * * * * if (re.search(self.Info[x][4], f[i])):
> > #Now we've matched the end of our section...
> > * * * * * * * * * * * * * * copying =
> > False * * * * * * * * * * * * * * * * #So let's stop copying out to
> > the temporary file...
> > * * * * * * * * * * if (copying == True):
> > * * * * * * * * * * * * g = open(tempfileName,
> > 'a') * * * * * * * * * * #Open that file in append mode...

>
> > g.write(f[i]) * * * * * * * * * * * * * * * * * * * #Write the line...
> > * * * * * * * * * * * * g.close()

>
> > This code works PERFECTLY in Linux. *Where I have a match in the file
> > I'm processing, it gets cut out from the start of the match until the
> > end of the match, and written to the temporary file in tempdir.

>
> > It does not work in Windows. *It does not create or write to the
> > temporary file AT ALL. *It creates the tempdir directory with no
> > problem.

>
> > Here's the kicker: it works perfectly in Windows if Windows is running
> > in VMware on a Linux host! *(I assume that that's because VMware is
> > passing some call to the host.)

>
> > Can anyone tell me what it is that I'm missing which would prevent the
> > file from being created on Windows natively?

>
> > I'm sorry I can't provide any more of the code, and I know that that
> > will hamper your efforts in helping me, so I apologise up front.

>
> > Assumptions:
> > You can assume self.checkbox25.GetValue() is always false for now, and
> > self.Info[x][0] contains a two character string like "00" or "09" or
> > "14". *There is always a match in the fileTarget, so self.Info[x][2]
> > will always be true at some point, as will self.Info[x][4]. *I am
> > cutting an HTML file at predetermined comment sections, and I have
> > control over the HTML files that are being cut. *(So I can force the
> > file to match what I need it to match if necessary.)

>
> > I hope however that it's something obvious that a Python guru here
> > will be able to spot and that this n00b is missing!

>
> > Thanks!

>
> Well, not to be rude, but that's quite a spaghetti code, some of the
> guilt, however, was for the mailing program that cuts 80+ lines.
> Others was the use of things like "for i in range(len(f)):" or "if (a
> == True)".
>
> Try checking whether you're trying to write to a path like r"\dir
> \file.txt" or r"dir\file.txt" instead of r"C:\dir\file.txt" in
> Windows.
>
> If that doesn't solve the problem, tell us a few things:
> - Any error messages? Or simply nothing is written out?
> - Has a blank file get created?- Hide quoted text -
>
> - Show quoted text -


Thanks to everyone for the help. I really do appreciate your
suggestions and time; again I apologise for not being able to give you
all the code to diagnose. I understand that it made this more
difficult and thank you for the input!

The error was not with the script.

The error was with the HTML that was being parsed! It's the last
thing I considered to check, and where I should have started.

John, thank you for the link to the style guide. I can see its use
and will make my code conform to the standards.

Thanks again to everyone!
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
response.redirect is not working but server.transfer is working gaurav tyagi ASP .Net 14 01-20-2006 04:22 AM
wifi not working on new hp, or not working after live update =?Utf-8?B?RHJhZ29ueA==?= Wireless Networking 1 10-01-2005 11:17 PM
ASP.NET client-side validation working, but button click not working Alan Silver ASP .Net 1 08-02-2005 03:50 PM
Cookies working on intranet but NOT working on Internet Martin Heuckeroth ASP .Net 5 04-01-2005 01:37 AM
Regular Expression validators NOT working, Required Field validators ARE working Ratman ASP .Net 0 09-14-2004 09:36 PM



Advertisments