102

Just starting to learn some Python and I'm having an issue as stated below:

a_file = open('E:\Python Win7-64-AMD 3.3\Test', encoding='utf-8')

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    a_file = open('E:\Python Win7-64-AMD 3.3\Test', encoding='utf-8')
PermissionError: [Errno 13] Permission denied: 'E:\\Python Win7-64-AMD 3.3\\Test\

Seems to be a file permission error, if any one can shine some light it would be greatly appreciated.

NOTE: not sure how Python and Windows files work but I'm logged in to Windows as Admin and the folder has admin permissions.

I have tried changing .exe properties to run as Admin.

bad_coder
  • 11,289
  • 20
  • 44
  • 72
BenniMcBeno
  • 2,415
  • 7
  • 24
  • 28
  • 11
    Is `Test` a file or a folder? – Joachim Isaksson Nov 03 '12 at 08:33
  • 2
    @JoachimIsaksson It's definitely a folder, as we can see in the end of the error line. Make that an answer. – Oleh Prypin Nov 03 '12 at 08:35
  • Test is a folder, the Document im following reads i can open a text doc using the following syntax a_file = open('E:\Python Win7-64-AMD 3.3\Test\a.txt', encoding='utf-8') using this syntax aswell as a_file = open('E:\Python Win7-64-AMD 3.3\Test', encoding='utf-8') gives me the same error. – BenniMcBeno Nov 03 '12 at 08:39
  • By the way, remember to use raw strings for Windows pathnames, or you'll get bitten badly if a subfolder name should happen to start with `n` or `b` or any other letter that can be part of an escape sequence... – Tim Pietzcker Nov 03 '12 at 08:40
  • ok so the file was on a flash drive and the flash driver was FAT32 and my HD is NTFS so it was format conflicts >< doing it locally works fine, thanks guys – BenniMcBeno Nov 03 '12 at 08:46
  • sorry raw strings lol ?? – BenniMcBeno Nov 03 '12 at 08:47
  • @BenniMcBeno raw strings are strings prefixed with r, thus: r'C:\Temp' is equivalent to 'C:\\Temp' the first is referred to as a raw string, so no escaping characters is necessary. – Alan Apr 03 '18 at 02:11

4 Answers4

90

When doing;

a_file = open('E:\Python Win7-64-AMD 3.3\Test', encoding='utf-8')

...you're trying to open a directory as a file, which may (and on most non UNIX file systems will) fail.

Your other example though;

a_file = open('E:\Python Win7-64-AMD 3.3\Test\a.txt', encoding='utf-8')

should work well if you just have the permission on a.txt. You may want to use a raw (r-prefixed) string though, to make sure your path does not contain any escape characters like \n that will be translated to special characters.

a_file = open(r'E:\Python Win7-64-AMD 3.3\Test\a.txt', encoding='utf-8')
Joachim Isaksson
  • 176,943
  • 25
  • 281
  • 294
40

For me, I was writing to a file that is opened in Excel.

Kai Wang
  • 3,303
  • 1
  • 31
  • 27
3

For me, I got this error when I was trying to write a file to a folder and wanted to make sure the folder existed. I accidentally used:

path = Path("path/to/my/file.txt")
path.mkdir(parents=True, exist_ok=True)
with open(path, "w") as file:
    ...

but the second line means "make a directory at this exact path (and make its parents too, without throwing errors for them existing already)". The third line then throws a PermissionError, because you can't use open() on a directory path, of course! The second line should have been:

path.parent.mkdir(parents=True, exist_ok=True)
Mew
  • 368
  • 1
  • 11
0

I encountered this problem when I accidentally tried running my python module through the command prompt while my working directory was C:\Windows\System32 instead of the usual directory from which I run my python module

Toldry
  • 485
  • 1
  • 4
  • 13