Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何阅读每一行,然后找到丢失的文档?_Java_Python - Fatal编程技术网

Java 如何阅读每一行,然后找到丢失的文档?

Java 如何阅读每一行,然后找到丢失的文档?,java,python,Java,Python,输入格式示例: Name of the file, Author, format type, id, content length. resume, abc, pdf, 7, 90 resume, asc, doc, 2, 90 resume, azc, docx, 3, 90 输出: 缺少文档格式 pdf 2,3 doc 7,

输入格式示例:

Name of the file,  Author,  format type,  id,  content length.
resume,            abc,     pdf,          7,   90
resume,            asc,     doc,          2,   90
resume,            azc,     docx,         3,   90
输出:

缺少文档格式

pdf

2,3

doc

7,3
以下是我的方法:从外部txt文件获取输入(必需)

File File=new文件(“//Users//Downloads//test\u cases//input.txt”);
ArrayList al=新的ArrayList()//创建新的通用arraylist
BufferedReader br=新的BufferedReader(新文件读取器(文件));
字符串st;
而((st=br.readLine())!=null)
新增(st);
br.close();
所以,我的问题是哪种数据结构适合使用?读完每一行。我还应该如何存储数据?

一个示例代码将非常有帮助。提前谢谢

您可以使用hashmaps存储数据,其中键作为格式,ID作为值。如果您想使用python,下面是一个示例:

# Read line from file
with open('filename.txt') as f:
    line = f.readline()
entries = line.split(' ')
# Hashmap to store formats and corresponding ids
formats = {}
# set to store all the ids
ids = set()
for en in entries:
    vals = en.split(',')
    frmt, identifier = vals[2], vals[3]
    # Set of ids for each format
    if frmt not in formats:
        formats[frmt] = set()
    formats[frmt].add(identifier)
    ids.add(identifier)
print("Missing formats")
for frmt in formats:
    print(frmt)
    # Missing formats are set difference between all the ids and the current ids
    print(ids-formats[frmt])

解决方案的前提是“格式类型”字段中的条目中只有一个值

此解决方案需要使用google guava collection。JAR可从“”下载


您希望如何访问数据。例如,访问每一行中的数据或通过列方式访问数据。您需要哪种语言的解决方案?首选Java。
# Read line from file
with open('filename.txt') as f:
    line = f.readline()
entries = line.split(' ')
# Hashmap to store formats and corresponding ids
formats = {}
# set to store all the ids
ids = set()
for en in entries:
    vals = en.split(',')
    frmt, identifier = vals[2], vals[3]
    # Set of ids for each format
    if frmt not in formats:
        formats[frmt] = set()
    formats[frmt].add(identifier)
    ids.add(identifier)
print("Missing formats")
for frmt in formats:
    print(frmt)
    # Missing formats are set difference between all the ids and the current ids
    print(ids-formats[frmt])
import java.io.BufferedReader;
import java.io.File;
import java.lang.reflect.Array;
import java.util.*;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
public class FileReader {

public void processData() {

Multimap dataMap = readFile();
dataMap.get("format type");
Object[] array =  ((ArrayListMultimap) dataMap).get("format type").toArray();

 System.out.println("Missing formats");
 for (Object entry:array) {
 System.out.println(entry.toString().trim());

 String position= "";
 for(int i=0;i<array.length;i++) {
 if(!entry.toString().equalsIgnoreCase (array[i].toString())) {
 position= position+" "+i;
 }
 }
 System.out.println(position);
 }
 }

  public Multimap readFile() {
  File file = new File("/Users/sree/Desktop/text.txt");
  Multimap<String,String> dataMap =  ArrayListMultimap.create();

  ArrayList<String> al=new ArrayList<String>();
  BufferedReader br;

  try {
  br = new BufferedReader(new java.io.FileReader(file));
  Arrays.stream(br.readLine().split(",")).forEach(s ->al.add(s.trim()));
  String st;
  while ((st = br.readLine()) != null) {

  VariableIcrementor instance = new VariableIcrementor();
  Arrays.stream(st.split(",")).                                      
  forEach(s->dataMap.put(al.get(instance.increment()),s));
  }
  br.close();
  } catch (Exception e) {
  e.printStackTrace();
  }
  return dataMap;
  }

  public static void main(String[] args) {
       FileReader instance = new FileReader();
       instance.processData();
    }
}
public class VariableIcrementor {

private int i=0;

public int increment() {
    return i++;
}
}