Как сравнить данные одного файла с данными другого файла, используя python?

Мое первое предложение - сделать вашу реализацию простой и прекратить борьбу с каркасом - использовать те же имена пакетов для всех приложений. Я хотел бы предложить сделать библиотеку из сериализуемых классов и поделиться ею между реализациями.

Если вы ДОЛЖНЫ сериализоваться / десериализоваться в приложениях с разными именами пакетов, тогда мое предложение состояло в том, чтобы отказаться от встроенного Сериализация Java, которая тесно связана с именем класса и именем пакета, и использовать что-то вроде Gson для сериализации / десериализации.

Gson позволяет вам указать TypeAdaper. Вы можете создавать и регистрировать TypeAdapter для каждого класса, который вы будете сериализовать / десериализовать, и указать имя класса (без имени пакета) как «тип» при сериализации, как в следующем примере, но использовать getSimpleName () вместо getCanonicalName ( )

При десериализации вы должны добавить правильное имя пакета в «type»

. Вам нужно будет делать TypeAdapters отдельно для каждого приложения.

public class GsonTypeAdapter<T> implements JsonSerializer<T>, JsonDeserializer<T> {
    @Override
    public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject result = new JsonObject();
        result.add("type", new JsonPrimitive(src.getClass().getCanonicalName()));
        result.add("properties", context.serialize(src, src.getClass()));

        return result;
    }

    @Override
    public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException {
        JsonObject jsonObject = json.getAsJsonObject();
        String type = jsonObject.get("type").getAsString();
        JsonElement element = jsonObject.get("properties");

        try {
            return context.deserialize(element, Class.forName(type));
        } catch (ClassNotFoundException cnfe) {
            throw new JsonParseException("Unknown element type: " + type, cnfe);
        }
    }
}
0
задан manoj kumar 4 March 2019 в 14:39
поделиться

1 ответ

Вот решение для сравнения 2 файлов:

#read file1 to df1
#your header seems no good with blank, so i rename it
df1 = pd.read_csv('file1',  sep=',' header=1, names=['PID','STARTED','%CPU','%MEM','COMMAND']])
#df1 is your first file, df2 the second
df_compare = df1.merge(df2.drop_duplicates(), on=['PID','STARTED','%CPU','%MEM','COMMAND'],
                   how='right', indicator=True)

print(df_compare)

#in result, you'll have a column '_merge' with both or right_only
#right_only means only in df2 and not in df1
#after you just filtered:

filter = df_compare._merge == 'both'
df_compare = df_compare[filter].drop(['_merge'],axis=1)

#in df_compare, you have the repeateted rows from df2 and df1, you could reindex if you want
print(df_compare)  

или другое решение (лучше, я думаю):

df_compare = df1[df1.index.isin(df1.merge(df2, how='inner', on=['PID','STARTED','%CPU','%MEM','COMMAND']).index)]
print(df_compare)
0
ответ дан Frenchy 4 March 2019 в 14:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: