Я делаю некоторый анализ исходного кода Java и хочу избавиться от строк, содержащих только открывающую {
или закрывающую скобку}
. И записать обратно в тот же файл. Как я могу этого добиться? Приведенный ниже код только проверяет, является ли первый символ скобкой, это может стереть следующее содержимое после скобки, чего я не хочу.
with open("source_code.txt", 'r') as f:
for line in f:
if not line[0].lstrip() == "{" or not line[0].lstrip() == "}":
# Write it back to the same file i.e. source_code.txt
ВХОД:
/**
* Copy all mappings from given map if they pass validation.
* If a single value fails validation, none of the others will be committed either.
*
* @param map map of keys and values
* @throws ValidationException if an entry in <tt>map</tt> fails validation
*/
public void putAll(Map<K, V> map)
throws ValidationException
{
for (K key: map.keySet()) {
if (mValidators.containsKey(key)) {
for (Validator validator : mValidators.get(key)) {
if (!validator.validate(map.get(key))) {
throw new ValidationException(validator.message());
}
}
}
}
mData.putAll(map);
}
ВЫХОД:
/**
* Copy all mappings from given map if they pass validation.
* If a single value fails validation, none of the others will be committed either.
*
* @param map map of keys and values
* @throws ValidationException if an entry in <tt>map</tt> fails validation
*/
public void putAll(Map<K, V> map)
throws ValidationException
for (K key: map.keySet()) {
if (mValidators.containsKey(key)) {
for (Validator validator : mValidators.get(key)) {
if (!validator.validate(map.get(key))) {
throw new ValidationException(validator.message());
mData.putAll(map);
см. ответ, если вы хотите также удалить завершающий {
или некоторые другие символы, просто обновите свой вопрос и дайте мне знать
Используйте splitlines()
, чтобы разбить текстовый файл на строки, и используйте startswith()
, чтобы проверить, начинается ли строка с подстроки.
with open("source_code.txt", 'r') as f:
rows = f.read().splitlines()
output = []
for row in rows:
if not (row.lstrip().startswith("{") or row.lstrip().startswith("}")):
output.append(row)
with open("source_code.txt", 'w') as f:
for row in output:
f.write(row + '\n')
Это результат
/**
* Copy all mappings from given map if they pass validation.
* If a single value fails validation, none of the others will be committed either.
*
* @param map map of keys and values
* @throws ValidationException if an entry in <tt>map</tt> fails validation
*/
public void putAll(Map<K, V> map)
throws ValidationException
for (K key: map.keySet()) {
if (mValidators.containsKey(key)) {
for (Validator validator : mValidators.get(key)) {
if (!validator.validate(map.get(key))) {
throw new ValidationException(validator.message());
mData.putAll(map);
Как насчет проверки длины
line
вместе с этим?