python脚本迭代地将输出写入文件

时间:2017-01-04 18:51:59

标签: python xml file io

首先,我是新手,没有编码背景。

我正在尝试创建一个python脚本,它将创建一个可以在以后使用的xml api文件,

我有一个csv文件,其中每一行用于一个api调用。我可能有200多条这样的线。 我正在尝试一次读取一行并将xml数据打印到一个文件中,比如file-1.xml

我可以打印出没有任何问题的数据,但我找不到一种方法来重定向这个输出一个应该迭代命名的文件(例如i在范围内(1..200)或其他东西)

int inject(string lpLibraryPath)
{
    HANDLE      hProc;
    LPVOID      paramAddr;
    HINSTANCE   hDll;

    hDll = LoadLibrary(L"KERNEL32");

    fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");

    hProc = OpenProcess(PROCESS_ALL_ACCESS, false, id);

    paramAddr = VirtualAllocEx(hProc, 0, strlen(lpLibraryPath.c_str()) + 1, MEM_COMMIT, PAGE_READWRITE);

    if(WriteProcessMemory(hProc, paramAddr, lpLibraryPath.c_str(), strlen(lpLibraryPath.c_str()) + 1, NULL) == NULL)
    {
        return 0;
    }

    CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0);

    CloseHandle(hProc);

    return 1;   
}
};

2 个答案:

答案 0 :(得分:1)

csv.reader类的每一行都有一个行号属性:line_num。只需使用reader.line_num作为文件名的一部分,如

for row in reader:
    with open('file-{0}.xml'.format(reader.line_num), 'w+') as out:
        xml_template = "..."    # Put your xml template here
        out.write(xml_template % tuple(row))

不需要花哨的额外代码。 但是,这确实假设每个请求都是单独的。

此外,对于新的格式设置指南,通常使用{0}和.format样式的字符串格式。因此,最后通过模板和%s代替% tuple(row)而不是{0},最后使用.format(tuple(row))public class MainActivity extends FragmentActivity { HeadlinesFragment firstFragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); // Create a new Fragment to be placed in the activity layout firstFragment = new HeadlinesFragment(); // Add the fragment to the 'fragment_container' FrameLayout getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, firstFragment).commit(); } @Override public void onBackPressed() { firstFragment.setData("yourString"); finish(); } } public class HeadlinesFragment extends Fragment { String data; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.article_view, container, false); } public void setData(String yourData){ data = yourData; } } 。不过只是一个建议。请参阅PEP 3101

答案 1 :(得分:0)

import csv
with open('file.csv', 'r') as f:
    reader = csv.reader(f)
    for i, row in enumerate(reader, start=1):
        with open('file-{}.xml'.format(i), 'w+') as outfile:
            outfile.write(pattern % tuple(row)) #for brevity omitted template

您只需要打开文件并write,就像从文件中读取一样。要跟踪我们所使用的号码,我们将使用enumerate