Question

How can I compile a string from selected rows of a file, run some operations on the string and then split that string back to the original rows into that same file?

I only need certain rows of the file. I cannot do the operations to the other parts of the file. I have made a class that separates these rows from the file and runs the operations on these rows, but I'm thinking this would be even faster to run these operations on a single string containing parts of the file that can be used in these operations...

Or, if I can run these operations on a whole dictionary, that would help too. The operations are string replacements and RegEx replacements.

I am using python 3.3


Edit: I'm going to explain this in greater detail here since my original post was so vague (thank you Paolo for pointing that out).

For instance, if I would like to fix a SubRipper (.srt-file), which is a common subtitle file, I would take something like this as an input (this is from an actual srt-file):

Here you can find correct example, submitting the file contents here messes newlines: http://pastebin.com/ZdWUpNZ2

...And then I would only fix those rows which have the actual subtitle lines, not those ordering number rows or those hide/show rows of the subtitle file. So my compiled string might be:

"They're up on that ridge.|They got us pinned down."

Then I would run operations on that string. Then I would have to save those rows back to the file. How can I get those subtitle rows back into my original file after they are fixed? I could split my compiled and fixed string using "|" as a row delimiter and put them back to the original file, but how can I be certain what row goes where?

Was it helpful?

Solution

You can use pysrt to edit SubRip files:

from pysrt import SubRipFile

subs = SubRipFile.open('some/file.srt')

for sub in subs:
    # do something with sub.text
    pass

# save changes to a new file
subs.save('other/path.srt', encoding='utf-8')
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top