3

タブや改行などがあり、データが JSON 形式のファイルを読み込もうとしています。

file.read()/などを使って読むとreadlines()、改行やタブもすべて読み込まれます。

、分割などを試しrstrip()ましたが、無駄に、何かが足りないかもしれません:

これが本質的に私がやっていることです:

 f = open('/path/to/file.txt')
 line = f.readlines()
 line.split('\n')

これはデータです(生のタブを含むため、書式設定が不十分です):

        {
      "foo": [ {
       "id1" : "1",
   "blah": "blah blah",
       "id2" : "5885221122",
      "bar" : [
              {  
         "name" : "Joe JJ", 
          "info": [                 {
         "custid": "SSN",    
         "type" : "String",             }        ]
        }     ]     }     ]  }

エレガントに無視できるかどうか疑問に思っていました。

利用希望もjson.dumps()

4

6 に答える 6

6

データがjsonの場合、json.load()を使用しないのはなぜですか?

import json
d = json.load(open('myfile.txt', 'r'))
于 2011-07-26T22:34:29.053 に答える
1

ちょっとしたハック、非効率だと思います:

f = open("/path/to/file.txt")
lines = f.read().replace("\n", "").replace("\t", "").replace(" ", "")

print lines
于 2011-07-26T22:36:28.773 に答える
0

その構造はどこから来たのですか?お悔やみ申し上げます。とにかく、最初にこれを試してみてください:

cleanedData = re.sub('[\n\t]', '', f.read())

これは、改行文字とタブ文字を力ずくで削除することです。返されるものは、 にフィードするのに適している可能性json.loadsがあります。余分な空白と改行を削除すると、ファイルの内容が実際に有効な JSON であるかどうかに大きく依存します。

于 2011-07-26T22:33:09.300 に答える
0
$ cat foo.json | python -mjson.tool
Expecting property name: line 11 column 41

コンマ"type" : "String",が原因で、JSON デコーダーが停止します。その問題がなければjson.load()、ファイルを直接ロードするために使用できます。

つまり、JSON の形式が正しくありません。つまり、にフィードする前に置換操作を実行する必要がありますjson.loads()。とにかく置換操作を行うには、ファイルを文字列に完全に読み込む必要があるため、json.loads(jsonstr)代わりにjson.load(jsonfilep)次を使用します。

    >>> import json, re
    >>> jsonfilep = open('foo.json')
    >>> jsonstr = re.sub(r'''(["'0-9.]\s*),\s*}''', r'\1}', jsonfilep.read())
    >>> jsonobj = json.loads(jsonstr)
    >>> jsonstr = json.dumps(jsonobj)
    >>> print(jsonstr)
    {"foo": [{"blah": "blah blah", "id2": "5885221122", "bar": [{"info":
    [{"type": "String", "custid": "SSN"}], "name": "Joe JJ"}], "id1": "1"}]}

re任意の値、数値、または文字列で発生する可能性があるため、モジュールのみを使用しました。

于 2011-07-26T23:24:46.017 に答える
0

各行をループしたい場合は、次のことができます。

for line in open('path/to/file.txt'):
  # Remove whitespace from both ends of line
  line = line.strip()

  # Do whatever you want with line
于 2011-07-26T22:35:31.457 に答える
0

json モジュールの使い方は?

import json

tmp = json.loads(open("/path/to/file.txt", "r"))

output = open("/path/to/file2.txt", "w")
output.write(json.dumps(tmp, sort_keys=True, indent=4))
于 2011-07-26T22:37:27.283 に答える