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 共有にアクセスすることはできません。

これには 2 つの一般的な方法があります。

まず、SMB 共有をファイルシステムのどこかにマウントできます。にマウントsmb://data/locした場合/mnt/data-locは、次のように書く必要があります。

c = csv.writer(open(r"/mnt/data-loc/scripts/trend.csv", "ab"))

または、FTP サーバーを扱うように、SMB に直接アクセスすることもできます。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 に答える