我正在尝试从网络位置打开.csv文件,并遇到以下错误..我有以下问题
1.如何在Windows中打开网络位置
2.如何在Windows和Linux中打开相同的网络位置?
import csv
import datetime
from collections import deque
#from collections import maxlength
icount=9
now = datetime.datetime.now()
time =now.strftime("%m/%d/%Y")
#Keep appending date and count everytime this script is run
c = csv.writer(open("\\data\loc\\scripts\trend.csv", "ab"))
c.writerow([time, icount-1])
#Now read the recent 5 entries and print
#cr = csv.reader(open("trend.csv","rb"))
with open('trend.csv','rU') as fin:
reader=csv.reader(fin)
d=deque(reader,8)
for l in d:
print l[0]
print l[1]
错误:-
Traceback (most recent call last):
File "database.py", line 10, in <module>
c = csv.writer(open("\\data\loc\scripts\trend.csv", "ab"))
IOError: [Errno 2] No such file or directory: '\\data\loc\\scripts\trend.csv'
最佳答案
您的第一个问题在这里:
c = csv.writer(open("\\data\loc\\scripts\trend.csv", "ab"))
因为您没有转义反斜杠,所以
\t
变成了一个制表符,每个\\
都变成了一个反斜杠,有了\l
,您会很幸运,并且没有变化。因此,这是您要求的路径:\data\loc\scripts rend.csv
显然那里什么都没有。
始终对Windows路径使用原始字符串,并且不会出现此问题。
c = csv.writer(open(r"\\data\loc\\scripts\trend.csv", "ab"))
假设有一个名为
data
的SMB服务器,且共享为loc
,并且您已经登录,则现在可以使用了。您仍然应该在
scripts
之前删除多余的反斜杠,并始终关闭您打开的文件...但是这些都不引起问题。从Linux上,您无法使用UNC路径访问SMB共享。
有两种常见的解决方法。
首先,您可以将SMB共享安装在文件系统上的某个位置。如果已将
smb://data/loc
安装到/mnt/data-loc
,则只需编写以下代码:c = csv.writer(open(r"/mnt/data-loc/scripts/trend.csv", "ab"))
或者,您可以直接访问SMB,就像处理FTP服务器一样。如果search PyPI,您会发现各种Python库可以简化此过程。它们中的许多都需要
libsmbclient
库,smbclient
工具或您可能尚未安装的其他东西,因此请确保阅读要求。使用这些库之一的方法如下:import smbclient
smb = smbclient.SambaClient(server='DATA', share='LOC', domain='WORKGROUP',
username='me', password='swordfish')
smb.chdir('scripts')
with smb.open('trend.csv', 'rb') as f:
data = f.read()
sio = StringIO.StringIO(data)
c = csv.writer(sio)
c.writerow([time, icount-1])
with smb.open('trend.csv', 'wb') as f:
f.write(sio.getvalue())
smb.close()
关于python - 打开网络位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17354967/