Как lassevk предполагает, выпишите новый файл, когда Вы идете, вот некоторый пример кода:
fin = open("a.txt")
fout = open("b.txt", "wt")
for line in fin:
fout.write( line.replace('foo', 'bar') )
fin.close()
fout.close()
Нормализовать вашу строку с помощью канонической декомпозиции:
private static final Pattern NONLATIN = Pattern.compile("[^\\w-]");
private static final Pattern WHITESPACE = Pattern.compile("[\\s]");
public static String toSlug(String input) {
String nowhitespace = WHITESPACE.matcher(input).replaceAll("-");
String normalized = Normalizer.normalize(nowhitespace, Form.NFD);
String slug = NONLATIN.matcher(normalized).replaceAll("");
return slug.toLowerCase(Locale.ENGLISH);
}
Это все еще довольно наивный процесс. Он не будет делать ничего для s-диеза (ß - используется в немецком языке) или любого нелатинского алфавита (греческий, кириллица, CJK и т. Д.).
Будьте осторожны при изменении регистра строки . Формы верхнего и нижнего регистра зависят от алфавита. В турецком языке U + 0069 ( i ) с заглавной буквы - U + 0130 ( İ ), а не U + 0049 ( I ), поэтому вы рискуете ввести Если вы используете String.toLowerCase ()
в турецкой локали, то верните в строку не-латинский символ.