2

我正在尝试从网络位置打开一个 .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'
4

1 回答 1

1

你的第一个问题在这里:

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 服务器。如果您搜索 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()
于 2013-06-28T00:11:19.147 回答