Мое первое предложение - сделать вашу реализацию простой и прекратить борьбу с каркасом - использовать те же имена пакетов для всех приложений. Я хотел бы предложить сделать библиотеку из сериализуемых классов и поделиться ею между реализациями.
Если вы ДОЛЖНЫ сериализоваться / десериализоваться в приложениях с разными именами пакетов, тогда мое предложение состояло в том, чтобы отказаться от встроенного Сериализация 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);
}
}
}
Вот решение для сравнения 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)