2016-03-23 26 views
-5

Pythonを使ってファイルに書き込む際に奇妙な問題があります。ここでは、コードは次のようになります。Pythonが関数のデータを使ってファイルに書き込む

t = func() 
print t 
f = open('data_t.dat', 'w') 
for i in t: 
    f.write('%d\n' % (i)) 
f.close() 

私は、関数からの例外をキャッチしませんでしたが、次のように「T」の値をプリントアウトすることができます。

[51535, 96382, 95788, 95293, 94996, 95491, 95392, 96085] 

をしかし、ファイルを生成することはできません。コードを実行した後、 "data_t.dat"というファイルはありません。ただし、このようなデータを直接使用すると、このファイルを生成することができます。

t = [51535, 96382, 95788, 95293, 94996, 95491, 95392, 96085] 
f = open('data_t.dat', 'w') 
for i in t: 
    f.write('%d\n' % (i)) 
f.close() 

私は別の方法で試しました。この場合、ファイルは生成できません。

t = func() 
t = [51535, 96382, 95788, 95293, 94996, 95491, 95392, 96085] 
f = open('data_t.dat', 'w') 
for i in t: 
    f.write('%d\n' % (i)) 
f.close() 

問題は何か分かりません。どんな提案も大歓迎です。ありがとう!

フォローアップ:Adam Smithが指摘しているように、ディレクトリはfunc()で変更されています。これが起こる理由です。ご協力いただきありがとうございます。

+6

"ファイルを生成できません"とはどういう意味ですか?例外はありますか?ファイルは作成されていますが、空ですか? – chepner

+2

あなたのコードは 'func()'に例外や葉が残っていませんか?あなたの最初の例では、 't'を出力しますか? – Lafexlos

+0

"ファイルを生成できません"というのは、 "data_t.dat"というファイルが存在しないことを意味します。コードを実行した後、ファイルは書き込まれません。 – user1794396

答えて

3

私はfuncは、次のようなコードを持っていることを合理的に確信している:

def func(): 
    os.chdir("somewhere else") 
    f = open("somefile.txt") 
    # generate data from somefile.txt 
    f.close() 
    return some_data 

os.chdirはあなたのグローバルな状態を変更するので、新しい相対パスがルートではなく、スクリプトを実行しているディレクトリとして"somewhere else"を持っています。、B

def func(): 
    f = open("full/qualified/path/to/somefile.txt") 
    ... 
+3

そして、「今日の霊魂」賞は... –

+0

@TimPietzckerああ、早くとも.... –

+0

ええ、それはまさに問題です。ありがとう! – user1794396

-1

この問題の第一の理由に達していない t = func() 後にそのコードです:に簡単な修正は代わりに行うことです何かが完了するのを中断した。 func()bodyが表示されないため、なぜ失敗するのかわからない

+0

コードは実際には*到達しましたが、それは私の最初の結論でした。私の答えは(やや分かりやすい)解決策を見てください。 –

関連する問題