如何使用python读取以下文件?

时间:2018-01-22 03:52:56

标签: python string list dictionary io

文本文件的格式:

import java.net.Socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Client {

    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 9090);
        BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        System.out.println(input.readLine());
    }
}

如何阅读此文件?它由字典组成。它不是json文件。

4 个答案:

答案 0 :(得分:0)

如前所述,这不是一组易于解析的统一数据。

  1. 有两组{}彼此独立。您需要决定将两者合并为1 JSON,其中包含2个Dicts(python)或1个Dict的2个JSON。
  2. JSON通常具有双引号(“”)的值,而不是单引号('')的字符串。在这里,似乎数据试图说'所有值都是单引号'和'所有变量/键都是双引号'。 JSON不喜欢值的单引号
  3. 由此看来,'赋值'是为您制作自定义阅读器。您需要逐行解析数据。然后你必须决定:你要把它变成一个转换为dict的JSON对象吗?或者您打算立即翻译数据?或者您想要我们的其他方式。决定如果您的代码失败,我们可以在看到代码后帮助您。否则,我们会推测你想做什么或为你做所有的工作。

    否则,请检查“如何阅读文件”或“打开文件”

    的文件

答案 1 :(得分:0)

如果它不是json格式,这是我的答案:

int input = 202;
bool flag = true;
var result = datalist.Where(q => q.CatId == input).FirstOrDefault();
var parrent = datalist.Where(q => q.CatId == result.ParrentId).FirstOrDefault();

var keyword = "";
while (String.IsNullOrEmpty(parrent.Keyword))
{
    parrent = datalist.Where(q => q.CatId == parrent.ParrentId).FirstOrDefault();
}
keyword = parrent.Keyword;

我采用了import ast def find(s, ch): # returns all indexes of occurrences of char ch in string s return [i for i, ltr in enumerate(s) if ltr == ch] # 1. Load your txt file as string with open('file.txt') as f: txt = f.read() # 2. Find occurrences of chars { and } start = find(txt, '{') end = find(txt, '}') # 3. Evaluate the string between corresponding occurrences of { and } for s, e in zip(start, end): a_python_dict = ast.literal_eval(txt[s:e+1]) print(a_python_dict) 方法here

答案 2 :(得分:0)

自定义解析器实现。它收集{和}之间的字符串,然后将其作为JSON加载。如果要加载嵌套字典,则需要添加括号计数器。

import json


result = []

with open('file.txt') as f:

    text_block = ''
    for line in f:
        text = line.strip()
        if text == '{':
           text_block = text
        elif text == '}':
            text_block += text
            result.append(json.loads(text_block))
        else:
            text_block += text

print(result)

输出:

[{'id': 2, 'name': 'hari'}, {'id': 4, 'name': 'kumar'}]

答案 3 :(得分:-1)

在我看来,你的文字是json格式!如果是这种情况,答案很简单:

import json

with open('file.txt', 'r') as f:
    data = json.loads(f.read())